@monerium/sdk-react-provider 1.2.0 → 1.2.1
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/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { ReactNode } from 'react';
|
|
|
4
4
|
import * as _tanstack_react_query from '@tanstack/react-query';
|
|
5
5
|
import { UseQueryOptions, UseQueryResult, UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
|
|
6
6
|
import MoneriumClient, { AuthFlowOptions, AuthFlowSIWEOptions, Chain, CurrencyCode, Profile, ProfilesResponse, Token, Address, ChainId, AddressesResponse, Currency, Balances, IBAN, IBANsResponse, Order, OrdersResponse, OrderState, ResponseStatus, SubmitProfileDetailsPayload, RequestIbanPayload, MoveIbanPayload, NewOrder, LinkedAddress, LinkAddress } from '@monerium/sdk';
|
|
7
|
-
export { Address, Balances, IBAN, LinkAddress, MoveIbanPayload, NewOrder, Order, Profile,
|
|
7
|
+
export { Address, Balances, IBAN, LinkAddress, MoveIbanPayload, NewOrder, Order, Profile, ResponseStatus, SubmitProfileDetailsPayload, Token } from '@monerium/sdk';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Wrap your application with the Monerium provider.
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
'use strict';var react=require('react'),reactQuery=require('@tanstack/react-query'),sdk=require('@monerium/sdk'),jsxRuntime=require('react/jsx-runtime');var w=react.createContext(null);var J=({children:e,clientId:r,redirectUri:n,environment:o="sandbox",refreshToken:i,onRefreshTokenUpdate:a,debug:u=false})=>{let s=reactQuery.useQueryClient(),[t]=react.useState(()=>new sdk.MoneriumClient({environment:o,clientId:r,redirectUri:n,debug:u})),[f,p]=react.useState(false),[q,E]=react.useState(null),[k,I]=react.useState(true);react.useEffect(()=>((async()=>{if(t)try{p(await t.getAccess());}catch(h){console.error("Failed to get access:",h);}finally{I(false),t?.bearerProfile&&a?.(t.bearerProfile.refresh_token);}})(),()=>{t&&t.disconnect();}),[]),react.useEffect(()=>{i&&!f&&!k&&(async()=>{if(t)try{p(await t.getAccess(i));}catch(h){console.error("Failed to get access:",h);}finally{t?.bearerProfile&&a?.(t.bearerProfile.refresh_token);}})();},[i]);let z=react.useCallback(async m=>{try{t&&await t.authorize(m);}catch(h){console.error("Error during authorization:",h),E(h);}},[t]),K=react.useCallback(async m=>{try{t&&await t.siwe(m);}catch(h){console.error("Error during sign in with ethereum:",h),E(h);}},[t]),C=async()=>{try{t&&await t.revokeAccess();}catch(m){console.error("Error during revoking access:",m),E(m);}finally{s.clear(),p(false);}};return jsxRuntime.jsx(w.Provider,{value:{sdk:t,authorize:z,siwe:K,isAuthorized:f,isLoading:k,error:q,disconnect:async()=>t?.disconnect(),revokeAccess:async()=>C()},children:e})};var d={getAll:["monerium"],getProfile:e=>["monerium","profile",...e?[e]:[]],getProfiles:["monerium","profiles"],getAddress:e=>["monerium","address",[e]],getAddresses:e=>["monerium","addresses",...e?[e]:[]],getBalances:(e,r,n)=>["monerium","balances",e,r,...n?[...n]:[]],getIban:e=>["monerium","iban",e],getIbans:e=>["monerium","ibans",...e?[e]:[]],getTokens:["monerium","tokens"],getOrder:e=>["monerium","order",e],getOrders:e=>["monerium","orders",...e?[e]:[]],submitProfileDetails:["monerium","submit-profile-details"],moveIban:["monerium","move-iban"],requestIban:["monerium","request-iban"],placeOrder:["monerium","place-order"],linkAddress:["monerium","link-address"]};function c(){let e=react.useContext(w);if(e===null)throw new Error("useSdk must be used within a MoneriumProvider");return e?.sdk}function l(){let e=react.useContext(w);if(e===null)throw new Error("useAuth must be used within a MoneriumProvider");return {isAuthorized:e.isAuthorized,authorize:e.authorize,siwe:e.siwe,isLoading:e.isLoading,error:e.error,disconnect:e.disconnect,revokeAccess:e.revokeAccess}}function Pe({profile:e,query:r}={}){let{isAuthorized:n}=l(),o=c(),{data:i}=B(),a=e||i?.profiles?.[0]?.id;return reactQuery.useQuery({...r,queryKey:d.getProfile(a),queryFn:async()=>{if(!o)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");if(!a)throw new Error("Profile Id is required");return o.getProfile(a)},enabled:!!(o&&n&&a&&(r?.enabled??true))})}function B({query:e}={}){let{isAuthorized:r}=l(),n=c();return reactQuery.useQuery({...e,queryKey:d.getProfiles,queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!r)throw new Error("User not authorized");return n.getProfiles()},enabled:!!(n&&r&&(e?.enabled??true))})}function Se({query:e}={}){let r=c(),{isAuthorized:n}=l();return reactQuery.useQuery({...e,queryKey:d.getTokens,queryFn:async()=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.getTokens()},enabled:!!(r&&n&&(e?.enabled??true))})}function ve({address:e,query:r={}}){let n=c(),{isAuthorized:o}=l();return reactQuery.useQuery({...r,queryKey:d.getAddress(e),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");if(!e)throw new Error("Address is required");return n.getAddress(e)},enabled:!!(n&&o&&e&&(r?.enabled??true))})}function qe({profile:e,chain:r,query:n={}}={}){let o=c(),{isAuthorized:i}=l();return reactQuery.useQuery({...n,queryKey:d.getAddresses({profile:e,chain:r?sdk.parseChain(r):undefined}),queryFn:async()=>{if(!o)throw new Error("No SDK instance available");if(!i)throw new Error("User not authorized");return o.getAddresses({profile:e,chain:r})},enabled:!!(o&&i&&(n?.enabled??true))})}function Ie({address:e,chain:r,currencies:n,query:o}){let i=c(),{isAuthorized:a}=l();return reactQuery.useQuery({...o,queryKey:d.getBalances(e,sdk.parseChain(r),n),staleTime:1e3*60*5,queryFn:async()=>{if(!i)throw new Error("No SDK instance available");if(!a)throw new Error("User not authorized");return i.getBalances(e,r,n)},enabled:!!(i&&a&&(o?.enabled??true))})}function ze({iban:e,query:r}){let n=c(),{isAuthorized:o}=l();return reactQuery.useQuery({...r,queryKey:d.getIban(e),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");return n.getIban(e)},enabled:!!(n&&o&&e&&(r?.enabled??true))})}function Ke({profile:e,chain:r,query:n={}}={}){let o=c(),{isAuthorized:i}=l();return reactQuery.useQuery({...n,queryKey:d.getIbans({profile:e,chain:r}),queryFn:async()=>{if(!o)throw new Error("No SDK instance available");if(!i)throw new Error("User not authorized");return o.getIbans({profile:e,chain:r})},enabled:!!(o&&i&&(n?.enabled??true))})}function Ce({orderId:e,query:r={}}){let n=c(),{isAuthorized:o}=l();return reactQuery.useQuery({...r,queryKey:d.getOrder(e),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");if(!e)throw new Error("Order id is required");return n.getOrder(e)},enabled:!!(n&&o&&e&&(r.enabled??true))})}function xe({query:e={},...r}={}){let n=c(),{isAuthorized:o}=l();return reactQuery.useQuery({...e,queryKey:d.getOrders(r),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");return n.getOrders(r)},enabled:!!(n&&o&&(e.enabled??true))})}function Ne({profile:e,mutation:r={}}){let n=c(),{isAuthorized:o}=l(),i=reactQuery.useQueryClient(),{mutateAsync:a,...u}=reactQuery.useMutation({...r,mutationKey:d.submitProfileDetails,mutationFn:async s=>{if(!n)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");return n.submitProfileDetails(e,s)},onSuccess(s,t,f){i.invalidateQueries({queryKey:d.getProfile(e)}),r?.onSuccess?.(s,t,f);},onError(s,t,f){throw r?.onError?.(s,t,f),s}});return {submitProfileDetails:a,...u}}function Re({mutation:e={}}={}){let r=c(),{isAuthorized:n}=l(),{mutateAsync:o,...i}=reactQuery.useMutation({...e,mutationKey:d.requestIban,mutationFn:async({address:a,chain:u,emailNotifications:s})=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.requestIban({address:a,chain:u,emailNotifications:s})},onSuccess(a,u,s){e?.onSuccess?.(a,u,s);},onError(a,u,s){throw e?.onError?.(a,u,s),a}});return {requestIban:o,...i}}function Me({mutation:e={}}={}){let r=c(),{isAuthorized:n}=l(),o=reactQuery.useQueryClient(),{mutateAsync:i,...a}=reactQuery.useMutation({...e,mutationKey:d.moveIban,mutationFn:async({iban:u,address:s,chain:t})=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.moveIban(u,{address:s,chain:t})},onSuccess(u,s,t){o.invalidateQueries({queryKey:d.getIban(s.iban)}),o.invalidateQueries({queryKey:d.getIbans()}),o.invalidateQueries({queryKey:d.getAddress(s.address)}),e?.onSuccess?.(u,s,t);},onError(u,s,t){throw e?.onError?.(u,s,t),u}});return {moveIban:i,...a}}function De({supportingDocument:e,mutation:r}={}){let n=c(),{isAuthorized:o}=l(),i=reactQuery.useQueryClient(),{mutateAsync:a,...u}=reactQuery.useMutation({...r,mutationKey:d.placeOrder,mutationFn:async s=>{if(!n)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");let t;if(parseInt(s.amount)>15e3){if(!e)throw new Error("Supporting document is required for orders above 15000");t=(await n.uploadSupportingDocument(e)).id;}let f={...s,documentId:t};return n.placeOrder(f)},onSuccess(s,t,f){i.invalidateQueries({queryKey:d.getOrders()}),i.invalidateQueries({queryKey:d.getBalances(s.address,s.chain)}),r?.onSuccess?.(s,t,f);},onError(s,t,f){throw r?.onError?.(s,t,f),s}});return {placeOrder:a,...u}}function Be({mutation:e}={}){let r=c(),{isAuthorized:n}=l(),o=reactQuery.useQueryClient(),{mutateAsync:i,...a}=reactQuery.useMutation({...e,mutationKey:d.linkAddress,mutationFn:async u=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.linkAddress(u)},onSuccess(u,s,t){o.invalidateQueries({queryKey:d.getAddresses()}),s.profile&&o.invalidateQueries({queryKey:d.getProfile(s.profile)}),e?.onSuccess?.(u,s,t);},onError(u,s,t){throw e?.onError?.(u,s,t),u}});return {linkAddress:i,...a}}var Fe=({state:e,profile:r,onMessage:n,onError:o})=>{let i=c();return react.useEffect(()=>(i&&i.subscribeOrderNotifications({filter:{state:e,profile:r},onMessage:n,onError:o}),()=>{i&&i?.unsubscribeOrderNotifications({state:e,profile:r});}),[i,r,e]),()=>i?.unsubscribeOrderNotifications({state:e,profile:r})};exports.MoneriumContext=w;exports.MoneriumProvider=J;exports.keys=d;exports.useAddress=ve;exports.useAddresses=qe;exports.useAuth=l;exports.useBalances=Ie;exports.useIBAN=ze;exports.useIBANs=Ke;exports.useLinkAddress=Be;exports.useMoveIban=Me;exports.useOrder=Ce;exports.useOrders=xe;exports.usePlaceOrder=De;exports.useProfile=Pe;exports.useProfiles=B;exports.useRequestIban=Re;exports.useSubmitProfileDetails=Ne;exports.useSubscribeOrderNotification=Fe;exports.useTokens=Se;//# sourceMappingURL=index.js.map
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9saWIvY29udGV4dC50c3giLCIuLi9zcmMvbGliL3Byb3ZpZGVyLnRzeCIsIi4uL3NyYy9saWIvaG9va3MudHN4Il0sIm5hbWVzIjpbIk1vbmVyaXVtQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJNb25lcml1bVByb3ZpZGVyIiwiY2hpbGRyZW4iLCJjbGllbnRJZCIsInJlZGlyZWN0VXJpIiwiZW52aXJvbm1lbnQiLCJyZWZyZXNoVG9rZW4iLCJvblJlZnJlc2hUb2tlblVwZGF0ZSIsImRlYnVnIiwicXVlcnlDbGllbnQiLCJ1c2VRdWVyeUNsaWVudCIsInNkayIsInVzZVN0YXRlIiwiTW9uZXJpdW1DbGllbnQiLCJpc0F1dGhvcml6ZWQiLCJzZXRJc0F1dGhvcml6ZWQiLCJlcnJvciIsInNldEVycm9yIiwibG9hZGluZ0F1dGgiLCJzZXRMb2FkaW5nQXV0aCIsInVzZUVmZmVjdCIsImF1dGhvcml6ZSIsInVzZUNhbGxiYWNrIiwicGFyYW1zIiwiZXJyIiwic2l3ZSIsInJldm9rZUFjY2VzcyIsImpzeCIsImtleXMiLCJwcm9maWxlIiwiYWRkcmVzcyIsImZpbHRlciIsImNoYWluIiwiY3VycmVuY2llcyIsImliYW4iLCJvcmRlcklkIiwidXNlU2RrIiwiY29udGV4dCIsInVzZUNvbnRleHQiLCJ1c2VBdXRoIiwidXNlUHJvZmlsZSIsInF1ZXJ5IiwiZGF0YSIsInVzZVByb2ZpbGVzIiwicHJvZmlsZVRvVXNlIiwidXNlUXVlcnkiLCJ1c2VUb2tlbnMiLCJ1c2VBZGRyZXNzIiwidXNlQWRkcmVzc2VzIiwicGFyc2VDaGFpbiIsInVzZUJhbGFuY2VzIiwidXNlSUJBTiIsInVzZUlCQU5zIiwidXNlT3JkZXIiLCJ1c2VPcmRlcnMiLCJmaWx0ZXJzIiwidXNlU3VibWl0UHJvZmlsZURldGFpbHMiLCJtdXRhdGlvbiIsIm11dGF0ZUFzeW5jIiwicmVzdCIsInVzZU11dGF0aW9uIiwiYm9keSIsInZhcmlhYmxlcyIsInZhcnMiLCJ1c2VSZXF1ZXN0SWJhbiIsImVtYWlsTm90aWZpY2F0aW9ucyIsInVzZU1vdmVJYmFuIiwidXNlUGxhY2VPcmRlciIsInN1cHBvcnRpbmdEb2N1bWVudCIsImRvY3VtZW50SWQiLCJuZXdCb2R5IiwidXNlTGlua0FkZHJlc3MiLCJ1c2VTdWJzY3JpYmVPcmRlck5vdGlmaWNhdGlvbiIsInN0YXRlIiwib25NZXNzYWdlIiwib25FcnJvciJdLCJtYXBwaW5ncyI6InlKQUlPLElBQU1BLENBQWtCQyxDQUFBQSxtQkFBQUEsQ0FFN0IsSUFBSSxFQ2tCQyxJQUFNQyxFQUFtQixDQUFDLENBQy9CLFFBQUFDLENBQUFBLENBQUFBLENBQ0EsUUFBQUMsQ0FBQUEsQ0FBQUEsQ0FDQSxXQUFBQyxDQUFBQSxDQUFBQSxDQUNBLFdBQUFDLENBQUFBLENBQUFBLENBQWMsU0FDZCxDQUFBLFlBQUEsQ0FBQUMsQ0FDQSxDQUFBLG9CQUFBLENBQUFDLENBQ0EsQ0FBQSxLQUFBLENBQUFDLENBQVEsQ0FBQSxLQUNWLENBVU0sR0FBQSxDQUNKLElBQU1DLENBQUFBLENBQWNDLHlCQUFlLEVBQUEsQ0FFN0IsQ0FBQ0MsQ0FBRyxDQUFJQyxDQUFBQSxjQUFBQSxDQUFTLElBRWQsSUFBSUMsbUJBQWUsQ0FDeEIsV0FBQSxDQUFBUixDQUNBLENBQUEsUUFBQSxDQUFBRixDQUNBLENBQUEsV0FBQSxDQUFBQyxDQUNBLENBQUEsS0FBQSxDQUFPSSxDQUNULENBQUMsQ0FDRixDQUFBLENBRUssQ0FBQ00sQ0FBQUEsQ0FBY0MsQ0FBZSxDQUFBLENBQUlILGNBQWtCLENBQUEsS0FBSyxDQUN6RCxDQUFBLENBQUNJLENBQU9DLENBQUFBLENBQVEsQ0FBSUwsQ0FBQUEsY0FBQUEsQ0FBaUMsSUFBSSxDQUFBLENBQ3pELENBQUNNLENBQUFBLENBQWFDLENBQWMsQ0FBQSxDQUFJUCxlQUFTLElBQUksQ0FBQSxDQUVuRFEsZUFBVSxDQUFBLEtBQUEsQ0FDUSxTQUFZLENBQzFCLEdBQUlULENBQUFBLENBQ0YsR0FBSSxDQUNGSSxDQUFnQixDQUFBLE1BQU1KLENB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LDZCQUE4QixDQUFBLENBQUUsS0FBTzhELENBQUFBLENBQUFBLENBQU8sT0FBUzVDLENBQUFBLENBQVEsQ0FBQyxFQUV6RSxDQUNDLENBQUEsQ0FBQSxDQUFDbEIsQ0FBS2tCLENBQUFBLENBQUFBLENBQVM0QyxDQUFLLENBQUMsQ0FFakIsQ0FBQSxJQUNMOUQsQ0FBSyxFQUFBLDZCQUFBLENBQThCLENBQUUsS0FBQSxDQUFPOEQsQ0FBTyxDQUFBLE9BQUEsQ0FBUzVDLENBQVEsQ0FBQyxDQUN6RSIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IFNka0luc3RhbmNlLCBVc2VBdXRoUmV0dXJuIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBNb25lcml1bUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PFxuICAoVXNlQXV0aFJldHVybiAmIFNka0luc3RhbmNlKSB8IG51bGxcbj4obnVsbCk7XG4iLCJpbXBvcnQgeyBSZWFjdE5vZGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlUXVlcnlDbGllbnQgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuXG5pbXBvcnQge1xuICBBdXRoRmxvd09wdGlvbnMsXG4gIEF1dGhGbG93U0lXRU9wdGlvbnMsXG4gIE1vbmVyaXVtQ2xpZW50LFxufSBmcm9tICdAbW9uZXJpdW0vc2RrJztcblxuaW1wb3J0IHsgTW9uZXJpdW1Db250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcblxuLyoqXG4gKiBXcmFwIHlvdXIgYXBwbGljYXRpb24gd2l0aCB0aGUgTW9uZXJpdW0gcHJvdmlkZXIuXG4gKiBAZ3JvdXAgUHJvdmlkZXJcbiAqIEBwYXJhbSBwYXJhbXNcbiAqIEBwYXJhbSBwYXJhbXMuY2hpbGRyZW4gLSBSZXN0IG9mIHRoZSBhcHBsaWNhdGlvbi5cbiAqIEBwYXJhbSBwYXJhbXMuY2xpZW50SWQgLSBNb25lcml1bSBhdXRoIGZsb3cgY2xpZW50IGlkLlxuICogQHBhcmFtIHBhcmFtcy5yZWRpcmVjdFVyaSAtIE1vbmVyaXVtIGF1dGggZmxvdyByZWRpcmVjdCB1cmwuXG4gKiBAcGFyYW0gcGFyYW1zLmVudmlyb25tZW50IC0gTW9uZXJpdW0gZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0gcGFyYW1zLm9uUmVmcmVzaFRva2VuVXBkYXRlIC0gQ2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgcmVmcmVzaCB0b2tlbiBpcyB1cGRhdGVkLiBTdG9yZSBpdCBzZWN1cmVseS5cbiAqIEBwYXJhbSBwYXJhbXMucmVmcmVzaFRva2VuIC0gUHJvdmlkZSB0aGUgc2VjdXJlbHkgc3RvcmVkIHJlZnJlc2ggdG9rZW4gdG8gcmVjb25uZWN0LlxuICogQHBhcmFtIHBhcmFtcy5kZWJ1ZyAtIEVuYWJsZSBkZWJ1ZyBtb2RlLlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IE1vbmVyaXVtUHJvdmlkZXIgPSAoe1xuICBjaGlsZHJlbixcbiAgY2xpZW50SWQsXG4gIHJlZGlyZWN0VXJpLFxuICBlbnZpcm9ubWVudCA9ICdzYW5kYm94JyxcbiAgcmVmcmVzaFRva2VuLFxuICBvblJlZnJlc2hUb2tlblVwZGF0ZSxcbiAgZGVidWcgPSBmYWxzZSxcbn06IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xpZW50SWQ6IHN0cmluZztcbiAgcmVkaXJlY3RVcmk6IHN0cmluZztcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSByZWRpcmVjdFVyaSAqL1xuICByZWRpcmVjdFVybD86IHN0cmluZztcbiAgZW52aXJvbm1lbnQ/OiAnc2FuZGJveCcgfCAncHJvZHVjdGlvbic7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgb25SZWZyZXNoVG9rZW5VcGRhdGU/OiAodG9rZW46IHN0cmluZykgPT4gdm9pZDtcbiAgZGVidWc/OiBib29sZWFuO1xufSkgPT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgW3Nka10gPSB1c2VTdGF0ZSgoKSA9PiB7XG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgU0RLXG4gICAgcmV0dXJuIG5ldyBNb25lcml1bUNsaWVudCh7XG4gICAgICBlbnZpcm9ubWVudCxcbiAgICAgIGNsaWVudElkLFxuICAgICAgcmVkaXJlY3RVcmksXG4gICAgICBkZWJ1ZzogZGVidWcsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IFtpc0F1dGhvcml6ZWQsIHNldElzQXV0aG9yaXplZF0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8RXJyb3IgfCB1bmtub3duIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtsb2FkaW5nQXV0aCwgc2V0TG9hZGluZ0F1dGhdID0gdXNlU3RhdGUodHJ1ZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb25uZWN0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHNkaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHNldElzQXV0aG9yaXplZChhd2FpdCBzZGsuZ2V0QWNjZXNzKCkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgYWNjZXNzOicsIGVycm9yKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzZXRMb2FkaW5nQXV0aChmYWxzZSk7XG4gICAgICAgICAgaWYgKHNkaz8uYmVhcmVyUHJvZmlsZSkge1xuICAgICAgICAgICAgb25SZWZyZXNoVG9rZW5VcGRhdGU/LihzZGsuYmVhcmVyUHJvZmlsZS5yZWZyZXNoX3Rva2VuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29ubmVjdCgpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChzZGspIHtcbiAgICAgICAgc2RrLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCByZWNvbm5lY3QgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoc2RrKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc2V0SXNBdXRob3JpemVkKGF3YWl0IHNkay5nZXRBY2Nlc3MocmVmcmVzaFRva2VuKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGdldCBhY2Nlc3M6JywgZXJyb3IpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmIChzZGs/LmJlYXJlclByb2ZpbGUpIHtcbiAgICAgICAgICAgIG9uUmVmcmVzaFRva2VuVXBkYXRlPy4oc2RrLmJlYXJlclByb2ZpbGUucmVmcmVzaF90b2tlbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAocmVmcmVzaFRva2VuICYmICFpc0F1dGhvcml6ZWQgJiYgIWxvYWRpbmdBdXRoKSB7XG4gICAgICByZWNvbm5lY3QoKTtcbiAgICB9XG4gIH0sIFtyZWZyZXNoVG9rZW5dKTtcblxuICBjb25zdCBhdXRob3JpemUgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocGFyYW1zPzogQXV0aEZsb3dPcHRpb25zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoc2RrKSB7XG4gICAgICAgICAgYXdhaXQgc2RrLmF1dGhvcml6ZShwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIGF1dGhvcml6YXRpb246JywgZXJyKTtcbiAgICAgICAgc2V0RXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZGtdXG4gICk7XG5cbiAgY29uc3Qgc2l3ZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChwYXJhbXM6IEF1dGhGbG93U0lXRU9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChzZGspIHtcbiAgICAgICAgICBhd2FpdCBzZGsuc2l3ZShwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIHNpZ24gaW4gd2l0aCBldGhlcmV1bTonLCBlcnIpO1xuICAgICAgICBzZXRFcnJvcihlcnIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW3Nka11cbiAgKTtcblxuICBjb25zdCByZXZva2VBY2Nlc3MgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChzZGspIHtcbiAgICAgICAgYXdhaXQgc2RrLnJldm9rZUFjY2VzcygpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIHJldm9raW5nIGFjY2VzczonLCBlcnIpO1xuICAgICAgc2V0RXJyb3IoZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcXVlcnlDbGllbnQuY2xlYXIoKTtcbiAgICAgIHNldElzQXV0aG9yaXplZChmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPE1vbmVyaXVtQ29udGV4dC5Qcm92aWRlclxuICAgICAgdmFsdWU9e3tcbiAgICAgICAgc2RrLFxuICAgICAgICBhdXRob3JpemUsXG4gICAgICAgIHNpd2UsXG4gICAgICAgIGlzQXV0aG9yaXplZCxcbiAgICAgICAgaXNMb2FkaW5nOiBsb2FkaW5nQXV0aCxcbiAgICAgICAgZXJyb3IsXG4gICAgICAgIGRpc2Nvbm5lY3Q6IGFzeW5jICgpID0+IHNkaz8uZGlzY29ubmVjdCgpLFxuICAgICAgICByZXZva2VBY2Nlc3M6IGFzeW5jICgpID0+IHJldm9rZUFjY2VzcygpLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Nb25lcml1bUNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuIiwiaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTXV0YXRpb24sIHVzZVF1ZXJ5LCB1c2VRdWVyeUNsaWVudCB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5cbmltcG9ydCBNb25lcml1bUNsaWVudCwge1xuICBBZGRyZXNzLFxuICBBZGRyZXNzZXNSZXNwb25zZSxcbiAgQmFsYW5jZXMsXG4gIENoYWluLFxuICBDaGFpbklkLFxuICBDdXJyZW5jeSxcbiAgQ3VycmVuY3lDb2RlLFxuICBJQkFOLFxuICBJQkFOc1Jlc3BvbnNlLFxuICBMaW5rQWRkcmVzcyxcbiAgTGlua2VkQWRkcmVzcyxcbiAgTW92ZUliYW5QYXlsb2FkLFxuICBOZXdPcmRlcixcbiAgT3JkZXIsXG4gIE9yZGVyc1Jlc3BvbnNlLFxuICBPcmRlclN0YXRlLFxuICBwYXJzZUNoYWluLFxuICBQcm9maWxlLFxuICBQcm9maWxlUGVybWlzc2lvbnMsXG4gIFByb2ZpbGVzUmVzcG9uc2UsXG4gIFJlcXVlc3RJYmFuUGF5bG9hZCxcbiAgUmVzcG9uc2VTdGF0dXMsXG4gIFN1Ym1pdFByb2ZpbGVEZXRhaWxzUGF5bG9hZCxcbiAgVG9rZW4sXG59IGZyb20gJ0Btb25lcml1bS9zZGsnO1xuXG5pbXBvcnQgeyBNb25lcml1bUNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHtcbiAgTXV0YXRpb25PcHRpb25zLFxuICBNdXRhdGlvblJlc3VsdCxcbiAgUXVlcnlPcHRpb25zLFxuICBVc2VBdXRoUmV0dXJuLFxufSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIFF1ZXJ5IGtleXMgZm9yIFJlYWN0IHF1ZXJ5XG4gKiAqL1xuZXhwb3J0IGNvbnN0IGtleXMgPSB7XG4gIGdldEFsbDogWydtb25lcml1bSddLFxuICBnZXRQcm9maWxlOiAocHJvZmlsZTogc3RyaW5nKSA9PiBbXG4gICAgJ21vbmVyaXVtJyxcbiAgICAncHJvZmlsZScsXG4gICAgLi4uKHByb2ZpbGUgPyBbcHJvZmlsZV0gOiBbXSksXG4gIF0sXG4gIGdldFByb2ZpbGVzOiBbJ21vbmVyaXVtJywgJ3Byb2ZpbGVzJ10sXG4gIGdldEFkZHJlc3M6IChhZGRyZXNzOiBzdHJpbmcpID0+IFsnbW9uZXJpdW0nLCAnYWRkcmVzcycsIFthZGRyZXNzXV0sXG4gIGdldEFkZHJlc3NlczogKGZpbHRlcj86IHVua25vd24pID0+IFtcbiAgICAnbW9uZXJpdW0nLFxuICAgICdhZGRyZXNzZXMnLFxuICAgIC4uLihmaWx0ZXIgPyBbZmlsdGVyXSA6IFtdKSxcbiAgXSxcbiAgZ2V0QmFsYW5jZXM6IChcbiAgICBhZGRyZXNzOiBzdHJpbmcsXG4gICAgY2hhaW46IENoYWluLFxuICAgIGN1cnJlbmNpZXM/OiBDdXJyZW5jeUNvZGUgfCBDdXJyZW5jeUNvZGVbXVxuICApID0+IFtcbiAgICAnbW9uZXJpdW0nLFxuICAgICdiYWxhbmNlcycsXG4gICAgYWRkcmVzcyxcbiAgICBjaGFpbixcbiAgICAuLi4oY3VycmVuY2llcyA/IFsuLi5jdXJyZW5jaWVzXSA6IFtdKSxcbiAgXSxcbiAgZ2V0SWJhbjogKGliYW46IHN0cmluZykgPT4gWydtb25lcml1bScsICdpYmFuJywgaWJhbl0sXG4gIGdldEliYW5zOiAoZmlsdGVyPzogdW5rbm93bikgPT4gW1xuICAgICdtb25lcml1bScsXG4gICAgJ2liYW5zJyxcbiAgICAuLi4oZmlsdGVyID8gW2ZpbHRlcl0gOiBbXSksXG4gIF0sXG4gIGdldFRva2VuczogWydtb25lcml1bScsICd0b2tlbnMnXSxcbiAgZ2V0T3JkZXI6IChvcmRlcklkOiBzdHJpbmcpID0+IFsnbW9uZXJpdW0nLCAnb3JkZXInLCBvcmRlcklkXSxcbiAgZ2V0T3JkZXJzOiAoZmlsdGVyPzogdW5rbm93bikgPT4gW1xuICAgICdtb25lcml1bScsXG4gICAgJ29yZGVycycsXG4gICAgLi4uKGZpbHRlciA/IFtmaWx0ZXJdIDogW10pLFxuICBdLFxuICBzdWJtaXRQcm9maWxlRGV0YWlsczogWydtb25lcml1bScsICdzdWJtaXQtcHJvZmlsZS1kZXRhaWxzJ10sXG4gIG1vdmVJYmFuOiBbJ21vbmVyaXVtJywgJ21vdmUtaWJhbiddLFxuICByZXF1ZXN0SWJhbjogWydtb25lcml1bScsICdyZXF1ZXN0LWliYW4nXSxcbiAgcGxhY2VPcmRlcjogWydtb25lcml1bScsICdwbGFjZS1vcmRlciddLFxuICBsaW5rQWRkcmVzczogWydtb25lcml1bScsICdsaW5rLWFkZHJlc3MnXSxcbn07XG5cbi8qKiBJbnRlcm5hbCBob29rIHRvIHVzZSBTREsgKi9cbmZ1bmN0aW9uIHVzZVNkaygpOiBNb25lcml1bUNsaWVudCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KE1vbmVyaXVtQ29udGV4dCk7XG5cbiAgaWYgKGNvbnRleHQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZVNkayBtdXN0IGJlIHVzZWQgd2l0aGluIGEgTW9uZXJpdW1Qcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0Py5zZGs7XG59XG5cbi8qKlxuICogIyBSZWRpcmVjdCB0byB0aGUgTW9uZXJpdW0gYXV0aCBmbG93LlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgQXV0aGVudGljYXRpb25cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgeyBhdXRob3JpemUsIGlzQXV0aG9yaXplZCwgaXNMb2FkaW5nLCBlcnJvciB9ID0gdXNlQXV0aCgpO1xuICpcbiAqIGF1dGhvcml6ZSgpOyAvLyBSZWRpcmVjdHMgdG8gdGhlIE1vbmVyaXVtIGF1dGggZmxvdy5cbiAqXG4gKiAvLyBPcHQtaW4gdG8gYXV0b21hdGVkIHdhbGxldCBsaW5raW5nIHdpdGggdGhlc2UgcGFyYW1ldGVycy5cbiAqIGF1dGhvcml6ZSh7IGFkZHJlc3MsIHNpZ25hdHVyZSwgY2hhaW4gfSkuXG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJucyB7VXNlQXV0aFJldHVybn1cbiAqIC0gYGF1dGhvcml6ZWAgIC0gUmVkaXJlY3RzIHRvIHRoZSBNb25lcml1bSBhdXRoIGZsb3cuXG4gKiAtIGBzaXdlYCAgICAgICAtIFNpZ24gaW4gd2l0aCBFdGhlcmV1bS4gaHR0cHM6Ly9tb25lcml1bS5jb20vc2l3ZVxuICogLSBgaXNBdXRob3JpemVkYCAtIFdoZXRoZXIgdGhlIHVzZXIgaXMgYXV0aG9yaXplZC5cbiAqIC0gYGlzTG9hZGluZ2AgLSBXaGV0aGVyIHRoZSBhdXRoIGZsb3cgaXMgbG9hZGluZy5cbiAqIC0gYGVycm9yYCAtIEVycm9yIG1lc3NhZ2UgaWYgdGhlIGF1dGggZmxvdyBmYWlscy5cbiAqIC0gYGRpc2Nvbm5lY3RgIC0gRGlzY29ubmVjdCB0aGUgdXNlci5cbiAqIC0gYHJldm9rZUFjY2Vzc2AgLSBSZXZva2UgdGhlIHVzZXIncyBhY2Nlc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBdXRoKCk6IFVzZUF1dGhSZXR1cm4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChNb25lcml1bUNvbnRleHQpO1xuXG4gIGlmIChjb250ZXh0ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VBdXRoIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBNb25lcml1bVByb3ZpZGVyJyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGlzQXV0aG9yaXplZDogY29udGV4dC5pc0F1dGhvcml6ZWQsXG4gICAgYXV0aG9yaXplOiBjb250ZXh0LmF1dGhvcml6ZSxcbiAgICBzaXdlOiBjb250ZXh0LnNpd2UsXG4gICAgaXNMb2FkaW5nOiBjb250ZXh0LmlzTG9hZGluZyxcbiAgICBlcnJvcjogY29udGV4dC5lcnJvcixcbiAgICBkaXNjb25uZWN0OiBjb250ZXh0LmRpc2Nvbm5lY3QsXG4gICAgcmV2b2tlQWNjZXNzOiBjb250ZXh0LnJldm9rZUFjY2VzcyxcbiAgfTtcbn1cblxuLyoqXG4gKiBJZiBubyBgcHJvZmlsZWAgaWQgaXMgcHJvdmlkZWQsIHRoZSBkZWZhdWx0IHByb2ZpbGUgaXMgdXNlZC5cbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IFByb2ZpbGVzXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZVByb2ZpbGUoKTtcbiAqIGBgYFxuXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vcHJvZmlsZSB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUHJvZmlsZSh7XG4gIHByb2ZpbGUsXG4gIHF1ZXJ5LFxufToge1xuICAvKiogVGhlIGlkIG9mIHRoZSBwcm9maWxlICovXG4gIHByb2ZpbGU/OiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxQcm9maWxlPjtcbn0gPSB7fSkge1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcblxuICBjb25zdCB7IGRhdGEgfSA9IHVzZVByb2ZpbGVzKCk7XG5cbiAgY29uc3QgcHJvZmlsZVRvVXNlID0gcHJvZmlsZSB8fCAoZGF0YT8ucHJvZmlsZXM/LlswXT8uaWQgYXMgc3RyaW5nKTtcblxuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldFByb2ZpbGUocHJvZmlsZVRvVXNlKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgaWYgKCFwcm9maWxlVG9Vc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9maWxlIElkIGlzIHJlcXVpcmVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0UHJvZmlsZShwcm9maWxlVG9Vc2UpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihcbiAgICAgIHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgcHJvZmlsZVRvVXNlICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKVxuICAgICksXG4gIH0pO1xufVxuLyoqXG4gKiAjIEdldCBwcm9maWxlc1xuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgUHJvZmlsZXNcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGRhdGEsXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZVByb2ZpbGVzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9wcm9maWxlcyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUHJvZmlsZXMoe1xuICBxdWVyeSxcbn06IHtcbiAgLyoqIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9ICovXG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPFByb2ZpbGVzUmVzcG9uc2U+O1xufSA9IHt9KSB7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuXG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0UHJvZmlsZXMsXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZGsuZ2V0UHJvZmlsZXMoKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGRhdGEsXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZVRva2VucygpO1xuICogYGBgXG5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi90b2tlbnMgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVRva2Vucyh7XG4gIHF1ZXJ5LFxufToge1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8VG9rZW5bXT47XG59ID0ge30pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0VG9rZW5zLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmdldFRva2VucygpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xufVxuXG4vKipcbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IEFkZHJlc3Nlc1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBcblxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VBZGRyZXNzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzLXYyI3RhZy9hZGRyZXNzZXMvb3BlcmF0aW9uL2FkZHJlc3MgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUFkZHJlc3Moe1xuICBhZGRyZXNzLFxuICBxdWVyeSA9IHt9LFxufToge1xuICAvKiogRmV0Y2ggYSBzcGVjaWZpYyBhZGRyZXNzLiAqL1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxBZGRyZXNzPjtcbn0pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRBZGRyZXNzKGFkZHJlc3MpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghYWRkcmVzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FkZHJlc3MgaXMgcmVxdWlyZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5nZXRBZGRyZXNzKGFkZHJlc3MpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihcbiAgICAgIHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgYWRkcmVzcyAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSlcbiAgICApLFxuICB9KTtcbn1cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgQWRkcmVzc2VzXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLnByb2ZpbGVdIEZpbHRlciBiYXNlZCBvbiBwcm9maWxlIGlkLlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXMuY2hhaW5dIEZpbHRlciBiYXNlZCBvbiBjaGFpbiAtIENVUlJFTlRMWSBSRVRVUk5TIEFOIEVSUk9SLlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VBZGRyZXNzZXMoKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3MtdjIjdGFnL2FkZHJlc3Nlcy9vcGVyYXRpb24vYWRkcmVzc2VzIHwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBZGRyZXNzZXMoe1xuICBwcm9maWxlLFxuICBjaGFpbixcbiAgcXVlcnkgPSB7fSxcbn06IHtcbiAgcHJvZmlsZT86IHN0cmluZztcbiAgY2hhaW4/OiBDaGFpbiB8IENoYWluSWQ7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxBZGRyZXNzZXNSZXNwb25zZT47XG59ID0ge30pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG5cbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcblxuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEFkZHJlc3Nlcyh7XG4gICAgICBwcm9maWxlLFxuICAgICAgY2hhaW46IGNoYWluID8gcGFyc2VDaGFpbihjaGFpbikgOiB1bmRlZmluZWQsXG4gICAgfSksXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZGsuZ2V0QWRkcmVzc2VzKHsgcHJvZmlsZSwgY2hhaW4gfSk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG4vKipcbiAqICMgR2V0IGJhbGFuY2UgZm9yIGEgYW4gYWRkcmVzcyBvbiBhIGdpdmUgY2hhaW5cbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IEFkZHJlc3Nlc1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8QmFsYW5jZXM+fSBwYXJhbXMuYWRkcmVzcyBUaGUgYWRkcmVzcyB0byBmZXRjaCB0aGUgYmFsYW5jZSBmb3IuXG4gKiBAcGFyYW0ge1F1ZXJ5T3B0aW9uczxCYWxhbmNlcz59IHBhcmFtcy5jaGFpbiBUaGUgY2hhaW4gdG8gZmV0Y2ggdGhlIGJhbGFuY2UgZm9yLlxuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8QmFsYW5jZXM+fSBbcGFyYW1zLmN1cnJlbmNpZXNdIE9uZSBvciBtYW55OiBgZXVyYCwgYHVzZGAsIGBnYnBgLCBgaXNrYFxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VCYWxhbmNlcygpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy92MiN0YWcvYWRkcmVzc2VzL29wZXJhdGlvbi9iYWxhbmNlcyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUJhbGFuY2VzKHtcbiAgYWRkcmVzcyxcbiAgY2hhaW4sXG4gIGN1cnJlbmNpZXMsXG4gIHF1ZXJ5LFxufToge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNoYWluOiBDaGFpbiB8IENoYWluSWQ7XG4gIGN1cnJlbmNpZXM/OiBDdXJyZW5jeSB8IEN1cnJlbmN5W107XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxCYWxhbmNlcz47XG59KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuXG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0QmFsYW5jZXMoYWRkcmVzcywgcGFyc2VDaGFpbihjaGFpbiksIGN1cnJlbmNpZXMpLFxuICAgIHN0YWxlVGltZTogMTAwMCAqIDYwICogNSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNkay5nZXRCYWxhbmNlcyhhZGRyZXNzLCBjaGFpbiwgY3VycmVuY2llcyk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG5cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgSUJBTnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlSUJBTigpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy12MiN0YWcvaWJhbnMvb3BlcmF0aW9uL2liYW4gfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlCQU4oe1xuICBpYmFuLFxuICBxdWVyeSxcbn06IHtcbiAgLyoqIEZldGNoIGEgc3BlY2lmaWMgSUJBTiAqL1xuICBpYmFuOiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxJQkFOPjtcbn0pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRJYmFuKGliYW4pLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0SWJhbihpYmFuKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiBpYmFuICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xufVxuLyoqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBJQkFOc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGRhdGEsXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZUlCQU5zKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzLXYyI3RhZy9pYmFucy9vcGVyYXRpb24vaWJhbnMgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlCQU5zKHtcbiAgcHJvZmlsZSxcbiAgY2hhaW4sXG4gIHF1ZXJ5ID0ge30sXG59OiB7XG4gIC8qKiBGZXRjaCBJQkFOcyBmb3IgYSBzcGVjaWZpYyBwcm9maWxlLiAqL1xuICBwcm9maWxlPzogc3RyaW5nO1xuICAvKiogRmV0Y2ggSUJBTnMgZm9yIGEgc3BlY2lmaWMgY2hhaW4uICovXG4gIGNoYWluPzogQ2hhaW4gfCBDaGFpbklkO1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8SUJBTnNSZXNwb25zZT47XG59ID0ge30pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRJYmFucyh7IHByb2ZpbGUsIGNoYWluIH0pLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0SWJhbnMoeyBwcm9maWxlLCBjaGFpbiB9KTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBPcmRlcnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlT3JkZXIoKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL29yZGVyfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU9yZGVyKHtcbiAgb3JkZXJJZCxcbiAgcXVlcnkgPSB7fSxcbn06IHtcbiAgLyoqICBUaGUgaWQgb2YgdGhlIG9yZGVyLiAqL1xuICBvcmRlcklkOiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxPcmRlcj47XG59KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldE9yZGVyKG9yZGVySWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICBpZiAoIW9yZGVySWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPcmRlciBpZCBpcyByZXF1aXJlZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLmdldE9yZGVyKG9yZGVySWQpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIG9yZGVySWQgJiYgKHF1ZXJ5LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBPcmRlcnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXMuYWRkcmVzc10gRmlsdGVyIGJhc2VkIG9uIHRoZSBibG9ja2NoYWluIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLm1lbW9dIEZpbHRlciBieSB0aGUgcGF5bWVudCBtZW1vL3JlZmVyZW5jZS4uXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy5wcm9maWxlXSBGaWx0ZXIgYmFzZWQgb24gdGhlIHByb2ZpbGUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLnN0YXRlXSBGaWx0ZXIgYmFzZWQgb24gdGhlIHN0YXRlIG9mIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLnR4SGFzaF0gRmlsdGVyIGJhc2VkIG9uIHRoZSBibG9ja2NoYWluIHRyYW5zYWN0aW9uIGhhc2guXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VPcmRlcnMoKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL29yZGVycyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlT3JkZXJzKHtcbiAgcXVlcnkgPSB7fSxcbiAgLi4uZmlsdGVyc1xufToge1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8T3JkZXJzUmVzcG9uc2U+O1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICB0eEhhc2g/OiBzdHJpbmc7XG4gIHByb2ZpbGU/OiBzdHJpbmc7XG4gIG1lbW8/OiBzdHJpbmc7XG4gIHN0YXRlPzogT3JkZXJTdGF0ZTtcbn0gPSB7fSkge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRPcmRlcnMoZmlsdGVycyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5nZXRPcmRlcnMoZmlsdGVycyk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBTdWJtaXQgdGhlIHJlcXVpcmVkIGNvbXBsaWFuY2UgaW5mb3JtYXRpb24gdG8gb25ib2FyZCB0aGUgY3VzdG9tZXIuXG4gKlxuICogTm90ZSB0aGF0IHlvdSB3b24ndCBiZSBhYmxlIHRvIGNoYW5nZSB0aGUgcHJvZmlsZSBcImtpbmRcIiBmcm9tIHBlcnNvbmFsIHRvIGNvcnBvcmF0ZSBvciB2aWNlIHZlcnNhIG9uY2UgdGhlIHByb2ZpbGUgaGFzIGJlZW4gYXBwcm92ZWQuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBQcm9maWxlc1xuICogQHBhcmFtIHBhcmFtXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW0ucHJvZmlsZSBUaGUgaWQgb2YgdGhlIHByb2ZpbGUgdG8gc3VibWl0IHRvLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgc3VibWl0UHJvZmlsZURldGFpbHMsIC8vIHVzZU11dGF0aW9uJ3MgYG11dGF0ZUFzeW5jYCBwcm9wZXJ0eVxuICogICAgaXNQZW5kaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgc3RhdHVzLFxuICogICAgLi4ubW9yZVVzZU11dGF0aW9uUmVzdWx0c1xuICogfSA9IHVzZVN1Ym1pdFByb2ZpbGVEZXRhaWxzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzLXYyI3RhZy9wcm9maWxlcy9vcGVyYXRpb24vcHJvZmlsZS1kZXRhaWxzIHwgQVBJIERvY3VtZW50YXRpb259fVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTdWJtaXRQcm9maWxlRGV0YWlscyh7XG4gIHByb2ZpbGUsXG4gIG11dGF0aW9uID0ge30sXG59OiB7XG4gIHByb2ZpbGU6IHN0cmluZztcbiAgLyoqIHtAaW5oZXJpdERvYyBNdXRhdGlvbk9wdGlvbnN9ICovXG4gIG11dGF0aW9uPzogTXV0YXRpb25PcHRpb25zPFxuICAgIFJlc3BvbnNlU3RhdHVzLFxuICAgIEVycm9yLFxuICAgIFN1Ym1pdFByb2ZpbGVEZXRhaWxzUGF5bG9hZFxuICA+O1xufSk6IE11dGF0aW9uUmVzdWx0PFxuICAnc3VibWl0UHJvZmlsZURldGFpbHMnLFxuICBSZXNwb25zZVN0YXR1cyxcbiAgRXJyb3IsXG4gIFN1Ym1pdFByb2ZpbGVEZXRhaWxzUGF5bG9hZFxuPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgeyBtdXRhdGVBc3luYywgLi4ucmVzdCB9ID0gdXNlTXV0YXRpb24oe1xuICAgIC4uLm11dGF0aW9uLFxuICAgIG11dGF0aW9uS2V5OiBrZXlzLnN1Ym1pdFByb2ZpbGVEZXRhaWxzLFxuICAgIG11dGF0aW9uRm46IGFzeW5jIChib2R5OiBTdWJtaXRQcm9maWxlRGV0YWlsc1BheWxvYWQpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuc3VibWl0UHJvZmlsZURldGFpbHMocHJvZmlsZSwgYm9keSk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3MoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KSB7XG4gICAgICAvLyBSZWZldGNoIGFsbCBvcmRlcnMgb24gc3VjY2Vzcy5cbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgcXVlcnlLZXk6IGtleXMuZ2V0UHJvZmlsZShwcm9maWxlKSxcbiAgICAgIH0pO1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIHN1Y2Nlc3MuXG4gICAgICBtdXRhdGlvbj8ub25TdWNjZXNzPy4oZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KTtcbiAgICB9LFxuICAgIG9uRXJyb3IoZXJyb3IsIHZhcnMsIGNvbnRleHQpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBlcnJvci5cbiAgICAgIG11dGF0aW9uPy5vbkVycm9yPy4oZXJyb3IsIHZhcnMsIGNvbnRleHQpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgc3VibWl0UHJvZmlsZURldGFpbHM6IG11dGF0ZUFzeW5jLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG4vKipcbiAqIENyZWF0ZSBhbiBJQkFOIGZvciBhIHNwZWNpZmllZCBhZGRyZXNzIGFuZCBjaGFpbi5cbiAqIEFsbCBpbmNvbWluZyBFVVIgcGF5bWVudHMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHJvdXRlZCB0byB0aGUgbGlua2VkIGFkZHJlc3Mgb24gdGhhdCBjaGFpbi5cbiAqIEFueSBsaW5rZWQgYWRkcmVzcyBjYW4gdXNlIHRoaXMgSUJBTiBmb3Igb3V0Z29pbmcgcGF5bWVudHMuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBJQkFOc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICByZXF1ZXN0SWJhbiwgLy8gdXNlTXV0YXRpb24ncyBgbXV0YXRlQXN5bmNgIHByb3BlcnR5XG4gKiAgICBpc1BlbmRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICBzdGF0dXMsXG4gKiAgICAuLi5tb3JlVXNlTXV0YXRpb25SZXN1bHRzXG4gKiB9ID0gdXNlUmVxdWVzdEliYW4oKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3MtdjIjdGFnL2liYW5zL29wZXJhdGlvbi9yZXF1ZXN0LWliYW4gfCBBUEkgRG9jdW1lbnRhdGlvbn19XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlcXVlc3RJYmFuKHtcbiAgbXV0YXRpb24gPSB7fSxcbn06IHtcbiAgLyoqIHtAaW5oZXJpdERvYyBNdXRhdGlvbk9wdGlvbnN9ICovXG4gIG11dGF0aW9uPzogTXV0YXRpb25PcHRpb25zPFJlc3BvbnNlU3RhdHVzLCBFcnJvciwgUmVxdWVzdEliYW5QYXlsb2FkPjtcbn0gPSB7fSk6IE11dGF0aW9uUmVzdWx0PFxuICAncmVxdWVzdEliYW4nLFxuICBSZXNwb25zZVN0YXR1cyxcbiAgRXJyb3IsXG4gIFJlcXVlc3RJYmFuUGF5bG9hZFxuPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuXG4gIGNvbnN0IHsgbXV0YXRlQXN5bmMsIC4uLnJlc3QgfSA9IHVzZU11dGF0aW9uKHtcbiAgICAuLi5tdXRhdGlvbixcbiAgICBtdXRhdGlvbktleToga2V5cy5yZXF1ZXN0SWJhbixcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoe1xuICAgICAgYWRkcmVzcyxcbiAgICAgIGNoYWluLFxuICAgICAgZW1haWxOb3RpZmljYXRpb25zLFxuICAgIH06IFJlcXVlc3RJYmFuUGF5bG9hZCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5yZXF1ZXN0SWJhbih7IGFkZHJlc3MsIGNoYWluLCBlbWFpbE5vdGlmaWNhdGlvbnMgfSk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3MoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KSB7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gc3VjY2Vzcy5cbiAgICAgIG11dGF0aW9uPy5vblN1Y2Nlc3M/LihkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuICAgIH0sXG4gICAgb25FcnJvcihlcnJvciwgdmFycywgY29udGV4dCkge1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIGVycm9yLlxuICAgICAgbXV0YXRpb24/Lm9uRXJyb3I/LihlcnJvciwgdmFycywgY29udGV4dCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICByZXF1ZXN0SWJhbjogbXV0YXRlQXN5bmMsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cbi8qKlxuICogTW92ZSBhbiBleGlzdGluZyBJQkFOIHRvIGEgc3BlY2lmaWVkIGFkZHJlc3MgYW4gY2hhaW4uXG4gKiBBbGwgaW5jb21pbmcgRVVSIHBheW1lbnRzIHdpbGwgYXV0b21hdGljYWxseSBiZSByb3V0ZWQgdG8gdGhlIGFkZHJlc3Mgb24gdGhhdCBjaGFpbi5cbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IElCQU5zXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIG1vdmVJYmFuLCAvLyB1c2VNdXRhdGlvbidzIGBtdXRhdGVBc3luY2AgcHJvcGVydHlcbiAqICAgIGlzUGVuZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHN0YXR1cyxcbiAqICAgIC4uLm1vcmVVc2VNdXRhdGlvblJlc3VsdHNcbiAqIH0gPSB1c2VNb3ZlSWJhbigpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy92MiN0YWcvaWJhbnMvb3BlcmF0aW9uL21vdmUtaWJhbiB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VNb3ZlSWJhbih7XG4gIG11dGF0aW9uID0ge30sXG59OiB7XG4gIC8qKiB7QGluaGVyaXREb2MgTXV0YXRpb25PcHRpb25zfSAqL1xuICBtdXRhdGlvbj86IE11dGF0aW9uT3B0aW9uczxcbiAgICBSZXNwb25zZVN0YXR1cyxcbiAgICBFcnJvcixcbiAgICBNb3ZlSWJhblBheWxvYWQgJiB7IGliYW46IHN0cmluZyB9XG4gID47XG59ID0ge30pOiBNdXRhdGlvblJlc3VsdDxcbiAgJ21vdmVJYmFuJyxcbiAgUmVzcG9uc2VTdGF0dXMsXG4gIEVycm9yLFxuICBNb3ZlSWJhblBheWxvYWQgJiB7IGliYW46IHN0cmluZyB9XG4+IHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICBjb25zdCB7IG11dGF0ZUFzeW5jLCAuLi5yZXN0IH0gPSB1c2VNdXRhdGlvbih7XG4gICAgLi4ubXV0YXRpb24sXG4gICAgbXV0YXRpb25LZXk6IGtleXMubW92ZUliYW4sXG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHtcbiAgICAgIGliYW4sXG4gICAgICBhZGRyZXNzLFxuICAgICAgY2hhaW4sXG4gICAgfTogTW92ZUliYW5QYXlsb2FkICYgeyBpYmFuOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5tb3ZlSWJhbihpYmFuLCB7IGFkZHJlc3MsIGNoYWluIH0pO1xuICAgIH0sXG4gICAgb25TdWNjZXNzKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCkge1xuICAgICAgLy8gUmVmZXRjaCBhbGwgb3JkZXJzIG9uIHN1Y2Nlc3MuXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEliYW4odmFyaWFibGVzLmliYW4pLFxuICAgICAgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEliYW5zKCksXG4gICAgICB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgcXVlcnlLZXk6IGtleXMuZ2V0QWRkcmVzcyh2YXJpYWJsZXMuYWRkcmVzcyksXG4gICAgICB9KTtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBzdWNjZXNzLlxuICAgICAgbXV0YXRpb24/Lm9uU3VjY2Vzcz8uKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCk7XG4gICAgfSxcbiAgICBvbkVycm9yKGVycm9yLCB2YXJzLCBjb250ZXh0KSB7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gZXJyb3IuXG4gICAgICBtdXRhdGlvbj8ub25FcnJvcj8uKGVycm9yLCB2YXJzLCBjb250ZXh0KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0sXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIG1vdmVJYmFuOiBtdXRhdGVBc3luYyxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuLyoqXG4gKiBXaGVuIHRoZSBvcmRlciBoYXMgYmVlbiBwbGFjZWQsIHRoZSBvcmRlcnMgcXVlcnkgd2lsbCBiZSBpbnZhbGlkYXRlZCBhbmQgcmUtZmV0Y2hlZC5cbiAqXG4gKiBJZiB0aGUgb3JkZXIgYW1vdW50IGlzIGFib3ZlIDE1MDAwLCBhIHN1cHBvcnRpbmcgZG9jdW1lbnQgaXMgcmVxdWlyZWQuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBPcmRlcnNcbiAqIEBwYXJhbSBwYXJhbVxuICogQHBhcmFtIHtGaWxlfSBwYXJhbS5zdXBwb3J0aW5nRG9jdW1lbnQgU3VwcG9ydGluZyBkb2N1bWVudCBmaWxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgcGxhY2VPcmRlciwgLy8gdXNlTXV0YXRpb24ncyBgbXV0YXRlQXN5bmNgIHByb3BlcnR5XG4gKiAgICBpc1BlbmRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICBzdGF0dXMsXG4gKiAgICAuLi5tb3JlVXNlTXV0YXRpb25SZXN1bHRzXG4gKiB9ID0gdXNlUGxhY2VPcmRlcigpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vcG9zdC1vcmRlcnN8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VQbGFjZU9yZGVyKHtcbiAgc3VwcG9ydGluZ0RvY3VtZW50LFxuICBtdXRhdGlvbixcbn06IHtcbiAgc3VwcG9ydGluZ0RvY3VtZW50PzogRmlsZTtcbiAgLyoqIHtAaW5oZXJpdERvYyBNdXRhdGlvbk9wdGlvbnN9ICovXG4gIG11dGF0aW9uPzogTXV0YXRpb25PcHRpb25zPE9yZGVyLCBFcnJvciwgTmV3T3JkZXI+O1xufSA9IHt9KTogTXV0YXRpb25SZXN1bHQ8J3BsYWNlT3JkZXInLCBPcmRlciwgRXJyb3IsIE5ld09yZGVyPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgeyBtdXRhdGVBc3luYywgLi4ucmVzdCB9ID0gdXNlTXV0YXRpb24oe1xuICAgIC4uLm11dGF0aW9uLFxuICAgIG11dGF0aW9uS2V5OiBrZXlzLnBsYWNlT3JkZXIsXG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGJvZHk6IE5ld09yZGVyKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgbGV0IGRvY3VtZW50SWQ7XG4gICAgICBpZiAocGFyc2VJbnQoYm9keS5hbW91bnQpID4gMTUwMDApIHtcbiAgICAgICAgaWYgKCFzdXBwb3J0aW5nRG9jdW1lbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnU3VwcG9ydGluZyBkb2N1bWVudCBpcyByZXF1aXJlZCBmb3Igb3JkZXJzIGFib3ZlIDE1MDAwJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBsb2FkZWREb2N1bWVudCA9XG4gICAgICAgICAgYXdhaXQgc2RrLnVwbG9hZFN1cHBvcnRpbmdEb2N1bWVudChzdXBwb3J0aW5nRG9jdW1lbnQpO1xuICAgICAgICBkb2N1bWVudElkID0gdXBsb2FkZWREb2N1bWVudC5pZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3Qm9keSA9IHtcbiAgICAgICAgLi4uYm9keSxcbiAgICAgICAgZG9jdW1lbnRJZDogZG9jdW1lbnRJZCxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBzZGsucGxhY2VPcmRlcihuZXdCb2R5KTtcbiAgICB9LFxuICAgIG9uU3VjY2VzcyhkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpIHtcbiAgICAgIC8vIFJlZmV0Y2ggYWxsIG9yZGVycyBvbiBzdWNjZXNzLlxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICBxdWVyeUtleToga2V5cy5nZXRPcmRlcnMoKSxcbiAgICAgIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICBxdWVyeUtleToga2V5cy5nZXRCYWxhbmNlcyhkYXRhLmFkZHJlc3MsIGRhdGEuY2hhaW4pLFxuICAgICAgfSk7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gc3VjY2Vzcy5cbiAgICAgIG11dGF0aW9uPy5vblN1Y2Nlc3M/LihkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuICAgIH0sXG4gICAgb25FcnJvcihlcnJvciwgdmFycywgY29udGV4dCkge1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIGVycm9yLlxuICAgICAgbXV0YXRpb24/Lm9uRXJyb3I/LihlcnJvciwgdmFycywgY29udGV4dCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBwbGFjZU9yZGVyOiBtdXRhdGVBc3luYyxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuLyoqXG4gKiAjIEFkZCBhZGRyZXNzIHRvIHByb2ZpbGUuXG4gKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgUHJvZmlsZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgbGlua0FkZHJlc3MsIC8vIHVzZU11dGF0aW9uJ3MgYG11dGF0ZUFzeW5jYCBwcm9wZXJ0eVxuICogICAgaXNQZW5kaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgc3RhdHVzLFxuICogICAgLi4ubW9yZVVzZU11dGF0aW9uUmVzdWx0c1xuICogfSA9IHVzZUxpbmtBZGRyZXNzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9wcm9maWxlLWFkZHJlc3NlcyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VMaW5rQWRkcmVzcyh7XG4gIG11dGF0aW9uLFxufToge1xuICAvKioge0Bpbmhlcml0RG9jIE11dGF0aW9uT3B0aW9uc30gKi9cbiAgbXV0YXRpb24/OiBNdXRhdGlvbk9wdGlvbnM8TGlua2VkQWRkcmVzcywgRXJyb3IsIExpbmtBZGRyZXNzPjtcbn0gPSB7fSk6IE11dGF0aW9uUmVzdWx0PCdsaW5rQWRkcmVzcycsIExpbmtlZEFkZHJlc3MsIEVycm9yLCBMaW5rQWRkcmVzcz4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIGNvbnN0IHsgbXV0YXRlQXN5bmMsIC4uLnJlc3QgfSA9IHVzZU11dGF0aW9uKHtcbiAgICAuLi5tdXRhdGlvbixcbiAgICBtdXRhdGlvbktleToga2V5cy5saW5rQWRkcmVzcyxcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoYm9keTogTGlua0FkZHJlc3MpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmxpbmtBZGRyZXNzKGJvZHkpO1xuICAgIH0sXG4gICAgb25TdWNjZXNzKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCkge1xuICAgICAgLy8gUmVmZXRjaCBhbGwgb3JkZXJzIG9uIHN1Y2Nlc3MuXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEFkZHJlc3NlcygpLFxuICAgICAgfSk7XG4gICAgICBpZiAodmFyaWFibGVzLnByb2ZpbGUpIHtcbiAgICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldFByb2ZpbGUodmFyaWFibGVzLnByb2ZpbGUpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBzdWNjZXNzLlxuICAgICAgbXV0YXRpb24/Lm9uU3VjY2Vzcz8uKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCk7XG4gICAgfSxcbiAgICBvbkVycm9yKGVycm9yLCB2YXJzLCBjb250ZXh0KSB7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gZXJyb3IuXG4gICAgICBtdXRhdGlvbj8ub25FcnJvcj8uKGVycm9yLCB2YXJzLCBjb250ZXh0KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0sXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGxpbmtBZGRyZXNzOiBtdXRhdGVBc3luYyxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuXG4vKipcbiAqIEFQSSBjb25zdW1lcnMgaGF2ZSB0aGUgb3B0aW9uIHRvIHN1YnNjcmliZSB0byBhIFdlYlNvY2tldCBmb3IgcmVhbC10aW1lIG9yZGVyIG5vdGlmaWNhdGlvbnMuIFRoaXMgV2ViU29ja2V0IGNvbXBsaWVzIHdpdGggdGhlIHN0YW5kYXJkIFdlYlNvY2tldCBQcm90b2NvbCwgYWxsb3dpbmcgdGhlIHVzZSBvZiBzdGFuZGFyZCBXZWJTb2NrZXQgbGlicmFyaWVzIGZvciBzdWJzY3JpcHRpb24uXG4gKlxuICogVGhlIFdlYlNvY2tldCBlbWl0cyBhbiBldmVudCB3aGVuIGEgb3JkZXIgY2hhbmdlcyBzdGF0ZTpcbiAqXG4gKiBgcGxhY2VkYDogVGhlIG9yZGVyIGhhcyBiZWVuIGNyZWF0ZWQgYnV0IG5vdCB5ZXQgcHJvY2Vzc2VkLlxuICpcbiAqIGBwZW5kaW5nYDogVGhlIG9yZGVyIGlzIGF3YWl0aW5nIGZ1bGZpbGxtZW50IChlLmcuLCByZXZpZXcsIG1pbnRpbmcvYnVybmluZyB0b2tlbnMsIG9yIHNlbmRpbmcvcmVjZWl2aW5nIFNFUEEgcGF5bWVudCkuXG4gKlxuICogYHByb2Nlc3NlZGA6IFRoZSBvcmRlciBoYXMgYmVlbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICpcbiAqIGByZWplY3RlZGA6IFRoZSBvcmRlciB3YXMgcmVqZWN0ZWQsIHBvc3NpYmx5IGR1ZSB0byBjb21wbGlhbmNlIHJlYXNvbnMgb3IgaW5zdWZmaWNpZW50IGZ1bmRzLlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgT3JkZXJzXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKiBAcGFyYW0ge09yZGVyU3RhdGV9IFtwYXJhbXMuc3RhdGVdIEZpbHRlciBiYXNlZCBvbiB0aGUgc3RhdGUgb2YgdGhlIG9yZGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMucHJvZmlsZV0gRmlsdGVyIGJhc2VkIG9uIHRoZSBwcm9maWxlIGlkIG9mIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmFtcy5vbk1lc3NhZ2UgQ2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBvcmRlciBub3RpZmljYXRpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFyYW1zLm9uRXJyb3JdIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgZXJyb3Igbm90aWZpY2F0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgc3RhdGUsXG4gKiAgICBwcm9maWxlLFxuICogICAgb25NZXNzYWdlLFxuICogICAgb25FcnJvclxuICogfSA9IHVzZVN1YnNjcmliZU9yZGVyTm90aWZpY2F0aW9uKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzL3YxI29wZXJhdGlvbi9vcmRlcnMtbm90aWZpY2F0aW9uc3wgQVBJIERvY3VtZW50YXRpb259XG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFVuc3Vic2NyaWJlIGZyb20gb3JkZXIgbm90aWZpY2F0aW9ucy5cbiAqL1xuXG5leHBvcnQgY29uc3QgdXNlU3Vic2NyaWJlT3JkZXJOb3RpZmljYXRpb24gPSAoe1xuICBzdGF0ZSxcbiAgcHJvZmlsZSxcbiAgb25NZXNzYWdlLFxuICBvbkVycm9yLFxufToge1xuICBzdGF0ZT86IE9yZGVyU3RhdGU7XG4gIHByb2ZpbGU/OiBzdHJpbmc7XG4gIG9uTWVzc2FnZTogKG9yZGVyOiBPcmRlcikgPT4gdm9pZDtcbiAgb25FcnJvcj86ICgoZXJyOiBFdmVudCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG59KSA9PiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNkaykge1xuICAgICAgc2RrLnN1YnNjcmliZU9yZGVyTm90aWZpY2F0aW9ucyh7XG4gICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICBwcm9maWxlOiBwcm9maWxlLFxuICAgICAgICB9LFxuICAgICAgICBvbk1lc3NhZ2U6IG9uTWVzc2FnZSxcbiAgICAgICAgb25FcnJvcjogb25FcnJvcixcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgLyoqXG4gICAgICAgKiBOb3RlIHRoYXQgaW4gZGV2ZWxvcG1lbnQgbW9kZSwgUmVhY3QgU3RyaWN0IG1vZGUgd2lsbCBjYXVzZSB0aGlzXG4gICAgICAgKiBjbGVhbnVwIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB0d2ljZSBvbiBjbGllbnQgc2lkZSByb3V0ZSBjaGFuZ2VzLlxuICAgICAgICogU28gYSBzb2NrZXQgd2lsbCBiZSBpbW1lZGlhdGVseSBjbG9zZWQgYW5kIG9wZW5lZCBhZ2Fpbi5cbiAgICAgICAqIFRoaXMgaXMgbm90IGFuIGlzc3VlIGluIHByb2R1Y3Rpb24gbW9kZS5cbiAgICAgICAqL1xuICAgICAgaWYgKHNkaykge1xuICAgICAgICBzZGs/LnVuc3Vic2NyaWJlT3JkZXJOb3RpZmljYXRpb25zKHsgc3RhdGU6IHN0YXRlLCBwcm9maWxlOiBwcm9maWxlIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtzZGssIHByb2ZpbGUsIHN0YXRlXSk7XG5cbiAgcmV0dXJuICgpID0+XG4gICAgc2RrPy51bnN1YnNjcmliZU9yZGVyTm90aWZpY2F0aW9ucyh7IHN0YXRlOiBzdGF0ZSwgcHJvZmlsZTogcHJvZmlsZSB9KTtcbn07XG5cbi8qKiBFeHBvcnQgdHlwZXMgZm9yIGRvY3VtZW50YXRpb24gKi9cbmV4cG9ydCB0eXBlIHtcbiAgQWRkcmVzcyxcbiAgQmFsYW5jZXMsXG4gIElCQU4sXG4gIE1vdmVJYmFuUGF5bG9hZCxcbiAgTGlua0FkZHJlc3MsXG4gIFByb2ZpbGUsXG4gIFByb2ZpbGVQZXJtaXNzaW9ucyxcbiAgVG9rZW4sXG4gIFN1Ym1pdFByb2ZpbGVEZXRhaWxzUGF5bG9hZCxcbiAgTmV3T3JkZXIsXG4gIFJlc3BvbnNlU3RhdHVzLFxuICBPcmRlcixcbn07XG4iXX0=
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9saWIvY29udGV4dC50c3giLCIuLi9zcmMvbGliL3Byb3ZpZGVyLnRzeCIsIi4uL3NyYy9saWIvaG9va3MudHN4Il0sIm5hbWVzIjpbIk1vbmVyaXVtQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJNb25lcml1bVByb3ZpZGVyIiwiY2hpbGRyZW4iLCJjbGllbnRJZCIsInJlZGlyZWN0VXJpIiwiZW52aXJvbm1lbnQiLCJyZWZyZXNoVG9rZW4iLCJvblJlZnJlc2hUb2tlblVwZGF0ZSIsImRlYnVnIiwicXVlcnlDbGllbnQiLCJ1c2VRdWVyeUNsaWVudCIsInNkayIsInVzZVN0YXRlIiwiTW9uZXJpdW1DbGllbnQiLCJpc0F1dGhvcml6ZWQiLCJzZXRJc0F1dGhvcml6ZWQiLCJlcnJvciIsInNldEVycm9yIiwibG9hZGluZ0F1dGgiLCJzZXRMb2FkaW5nQXV0aCIsInVzZUVmZmVjdCIsImF1dGhvcml6ZSIsInVzZUNhbGxiYWNrIiwicGFyYW1zIiwiZXJyIiwic2l3ZSIsInJldm9rZUFjY2VzcyIsImpzeCIsImtleXMiLCJwcm9maWxlIiwiYWRkcmVzcyIsImZpbHRlciIsImNoYWluIiwiY3VycmVuY2llcyIsImliYW4iLCJvcmRlcklkIiwidXNlU2RrIiwiY29udGV4dCIsInVzZUNvbnRleHQiLCJ1c2VBdXRoIiwidXNlUHJvZmlsZSIsInF1ZXJ5IiwiZGF0YSIsInVzZVByb2ZpbGVzIiwicHJvZmlsZVRvVXNlIiwidXNlUXVlcnkiLCJ1c2VUb2tlbnMiLCJ1c2VBZGRyZXNzIiwidXNlQWRkcmVzc2VzIiwicGFyc2VDaGFpbiIsInVzZUJhbGFuY2VzIiwidXNlSUJBTiIsInVzZUlCQU5zIiwidXNlT3JkZXIiLCJ1c2VPcmRlcnMiLCJmaWx0ZXJzIiwidXNlU3VibWl0UHJvZmlsZURldGFpbHMiLCJtdXRhdGlvbiIsIm11dGF0ZUFzeW5jIiwicmVzdCIsInVzZU11dGF0aW9uIiwiYm9keSIsInZhcmlhYmxlcyIsInZhcnMiLCJ1c2VSZXF1ZXN0SWJhbiIsImVtYWlsTm90aWZpY2F0aW9ucyIsInVzZU1vdmVJYmFuIiwidXNlUGxhY2VPcmRlciIsInN1cHBvcnRpbmdEb2N1bWVudCIsImRvY3VtZW50SWQiLCJuZXdCb2R5IiwidXNlTGlua0FkZHJlc3MiLCJ1c2VTdWJzY3JpYmVPcmRlck5vdGlmaWNhdGlvbiIsInN0YXRlIiwib25NZXNzYWdlIiwib25FcnJvciJdLCJtYXBwaW5ncyI6InlKQUlPLElBQU1BLENBQWtCQyxDQUFBQSxtQkFBQUEsQ0FFN0IsSUFBSSxFQ2tCQyxJQUFNQyxFQUFtQixDQUFDLENBQy9CLFFBQUFDLENBQUFBLENBQUFBLENBQ0EsUUFBQUMsQ0FBQUEsQ0FBQUEsQ0FDQSxXQUFBQyxDQUFBQSxDQUFBQSxDQUNBLFdBQUFDLENBQUFBLENBQUFBLENBQWMsU0FDZCxDQUFBLFlBQUEsQ0FBQUMsQ0FDQSxDQUFBLG9CQUFBLENBQUFDLENBQ0EsQ0FBQSxLQUFBLENBQUFDLENBQVEsQ0FBQSxLQUNWLENBVU0sR0FBQSxDQUNKLElBQU1DLENBQUFBLENBQWNDLHlCQUFlLEVBQUEsQ0FFN0IsQ0FBQ0MsQ0FBRyxDQUFJQyxDQUFBQSxjQUFBQSxDQUFTLElBRWQsSUFBSUMsbUJBQWUsQ0FDeEIsV0FBQSxDQUFBUixDQUNBLENBQUEsUUFBQSxDQUFBRixDQUNBLENBQUEsV0FBQSxDQUFBQyxDQUNBLENBQUEsS0FBQSxDQUFPSSxDQUNULENBQUMsQ0FDRixDQUFBLENBRUssQ0FBQ00sQ0FBQUEsQ0FBY0MsQ0FBZSxDQUFBLENBQUlILGNBQWtCLENBQUEsS0FBSyxDQUN6RCxDQUFBLENBQUNJLENBQU9DLENBQUFBLENBQVEsQ0FBSUwsQ0FBQUEsY0FBQUEsQ0FBaUMsSUFBSSxDQUFBLENBQ3pELENBQUNNLENBQUFBLENBQWFDLENBQWMsQ0FBQSxDQUFJUCxlQUFTLElBQUksQ0FBQSxDQUVuRFEsZUFBVSxDQUFBLEtBQUEsQ0FDUSxTQUFZLENBQzFCLEdBQUlULENBQUFBLENBQ0YsR0FBSSxDQUNGSSxDQUFnQixDQUFBLE1BQU1KLENB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LDZCQUE4QixDQUFBLENBQUUsS0FBTzhELENBQUFBLENBQUFBLENBQU8sT0FBUzVDLENBQUFBLENBQVEsQ0FBQyxFQUV6RSxDQUNDLENBQUEsQ0FBQSxDQUFDbEIsQ0FBS2tCLENBQUFBLENBQUFBLENBQVM0QyxDQUFLLENBQUMsQ0FFakIsQ0FBQSxJQUNMOUQsQ0FBSyxFQUFBLDZCQUFBLENBQThCLENBQUUsS0FBQSxDQUFPOEQsQ0FBTyxDQUFBLE9BQUEsQ0FBUzVDLENBQVEsQ0FBQyxDQUN6RSIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IFNka0luc3RhbmNlLCBVc2VBdXRoUmV0dXJuIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBNb25lcml1bUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PFxuICAoVXNlQXV0aFJldHVybiAmIFNka0luc3RhbmNlKSB8IG51bGxcbj4obnVsbCk7XG4iLCJpbXBvcnQgeyBSZWFjdE5vZGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlUXVlcnlDbGllbnQgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuXG5pbXBvcnQge1xuICBBdXRoRmxvd09wdGlvbnMsXG4gIEF1dGhGbG93U0lXRU9wdGlvbnMsXG4gIE1vbmVyaXVtQ2xpZW50LFxufSBmcm9tICdAbW9uZXJpdW0vc2RrJztcblxuaW1wb3J0IHsgTW9uZXJpdW1Db250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcblxuLyoqXG4gKiBXcmFwIHlvdXIgYXBwbGljYXRpb24gd2l0aCB0aGUgTW9uZXJpdW0gcHJvdmlkZXIuXG4gKiBAZ3JvdXAgUHJvdmlkZXJcbiAqIEBwYXJhbSBwYXJhbXNcbiAqIEBwYXJhbSBwYXJhbXMuY2hpbGRyZW4gLSBSZXN0IG9mIHRoZSBhcHBsaWNhdGlvbi5cbiAqIEBwYXJhbSBwYXJhbXMuY2xpZW50SWQgLSBNb25lcml1bSBhdXRoIGZsb3cgY2xpZW50IGlkLlxuICogQHBhcmFtIHBhcmFtcy5yZWRpcmVjdFVyaSAtIE1vbmVyaXVtIGF1dGggZmxvdyByZWRpcmVjdCB1cmwuXG4gKiBAcGFyYW0gcGFyYW1zLmVudmlyb25tZW50IC0gTW9uZXJpdW0gZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0gcGFyYW1zLm9uUmVmcmVzaFRva2VuVXBkYXRlIC0gQ2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgcmVmcmVzaCB0b2tlbiBpcyB1cGRhdGVkLiBTdG9yZSBpdCBzZWN1cmVseS5cbiAqIEBwYXJhbSBwYXJhbXMucmVmcmVzaFRva2VuIC0gUHJvdmlkZSB0aGUgc2VjdXJlbHkgc3RvcmVkIHJlZnJlc2ggdG9rZW4gdG8gcmVjb25uZWN0LlxuICogQHBhcmFtIHBhcmFtcy5kZWJ1ZyAtIEVuYWJsZSBkZWJ1ZyBtb2RlLlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IE1vbmVyaXVtUHJvdmlkZXIgPSAoe1xuICBjaGlsZHJlbixcbiAgY2xpZW50SWQsXG4gIHJlZGlyZWN0VXJpLFxuICBlbnZpcm9ubWVudCA9ICdzYW5kYm94JyxcbiAgcmVmcmVzaFRva2VuLFxuICBvblJlZnJlc2hUb2tlblVwZGF0ZSxcbiAgZGVidWcgPSBmYWxzZSxcbn06IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xpZW50SWQ6IHN0cmluZztcbiAgcmVkaXJlY3RVcmk6IHN0cmluZztcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSByZWRpcmVjdFVyaSAqL1xuICByZWRpcmVjdFVybD86IHN0cmluZztcbiAgZW52aXJvbm1lbnQ/OiAnc2FuZGJveCcgfCAncHJvZHVjdGlvbic7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgb25SZWZyZXNoVG9rZW5VcGRhdGU/OiAodG9rZW46IHN0cmluZykgPT4gdm9pZDtcbiAgZGVidWc/OiBib29sZWFuO1xufSkgPT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgW3Nka10gPSB1c2VTdGF0ZSgoKSA9PiB7XG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgU0RLXG4gICAgcmV0dXJuIG5ldyBNb25lcml1bUNsaWVudCh7XG4gICAgICBlbnZpcm9ubWVudCxcbiAgICAgIGNsaWVudElkLFxuICAgICAgcmVkaXJlY3RVcmksXG4gICAgICBkZWJ1ZzogZGVidWcsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IFtpc0F1dGhvcml6ZWQsIHNldElzQXV0aG9yaXplZF0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8RXJyb3IgfCB1bmtub3duIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtsb2FkaW5nQXV0aCwgc2V0TG9hZGluZ0F1dGhdID0gdXNlU3RhdGUodHJ1ZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb25uZWN0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHNkaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHNldElzQXV0aG9yaXplZChhd2FpdCBzZGsuZ2V0QWNjZXNzKCkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgYWNjZXNzOicsIGVycm9yKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzZXRMb2FkaW5nQXV0aChmYWxzZSk7XG4gICAgICAgICAgaWYgKHNkaz8uYmVhcmVyUHJvZmlsZSkge1xuICAgICAgICAgICAgb25SZWZyZXNoVG9rZW5VcGRhdGU/LihzZGsuYmVhcmVyUHJvZmlsZS5yZWZyZXNoX3Rva2VuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29ubmVjdCgpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChzZGspIHtcbiAgICAgICAgc2RrLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCByZWNvbm5lY3QgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoc2RrKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc2V0SXNBdXRob3JpemVkKGF3YWl0IHNkay5nZXRBY2Nlc3MocmVmcmVzaFRva2VuKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGdldCBhY2Nlc3M6JywgZXJyb3IpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmIChzZGs/LmJlYXJlclByb2ZpbGUpIHtcbiAgICAgICAgICAgIG9uUmVmcmVzaFRva2VuVXBkYXRlPy4oc2RrLmJlYXJlclByb2ZpbGUucmVmcmVzaF90b2tlbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAocmVmcmVzaFRva2VuICYmICFpc0F1dGhvcml6ZWQgJiYgIWxvYWRpbmdBdXRoKSB7XG4gICAgICByZWNvbm5lY3QoKTtcbiAgICB9XG4gIH0sIFtyZWZyZXNoVG9rZW5dKTtcblxuICBjb25zdCBhdXRob3JpemUgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocGFyYW1zPzogQXV0aEZsb3dPcHRpb25zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoc2RrKSB7XG4gICAgICAgICAgYXdhaXQgc2RrLmF1dGhvcml6ZShwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIGF1dGhvcml6YXRpb246JywgZXJyKTtcbiAgICAgICAgc2V0RXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZGtdXG4gICk7XG5cbiAgY29uc3Qgc2l3ZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChwYXJhbXM6IEF1dGhGbG93U0lXRU9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChzZGspIHtcbiAgICAgICAgICBhd2FpdCBzZGsuc2l3ZShwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIHNpZ24gaW4gd2l0aCBldGhlcmV1bTonLCBlcnIpO1xuICAgICAgICBzZXRFcnJvcihlcnIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW3Nka11cbiAgKTtcblxuICBjb25zdCByZXZva2VBY2Nlc3MgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChzZGspIHtcbiAgICAgICAgYXdhaXQgc2RrLnJldm9rZUFjY2VzcygpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIHJldm9raW5nIGFjY2VzczonLCBlcnIpO1xuICAgICAgc2V0RXJyb3IoZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcXVlcnlDbGllbnQuY2xlYXIoKTtcbiAgICAgIHNldElzQXV0aG9yaXplZChmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPE1vbmVyaXVtQ29udGV4dC5Qcm92aWRlclxuICAgICAgdmFsdWU9e3tcbiAgICAgICAgc2RrLFxuICAgICAgICBhdXRob3JpemUsXG4gICAgICAgIHNpd2UsXG4gICAgICAgIGlzQXV0aG9yaXplZCxcbiAgICAgICAgaXNMb2FkaW5nOiBsb2FkaW5nQXV0aCxcbiAgICAgICAgZXJyb3IsXG4gICAgICAgIGRpc2Nvbm5lY3Q6IGFzeW5jICgpID0+IHNkaz8uZGlzY29ubmVjdCgpLFxuICAgICAgICByZXZva2VBY2Nlc3M6IGFzeW5jICgpID0+IHJldm9rZUFjY2VzcygpLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Nb25lcml1bUNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuIiwiaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTXV0YXRpb24sIHVzZVF1ZXJ5LCB1c2VRdWVyeUNsaWVudCB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5cbmltcG9ydCBNb25lcml1bUNsaWVudCwge1xuICBBZGRyZXNzLFxuICBBZGRyZXNzZXNSZXNwb25zZSxcbiAgQmFsYW5jZXMsXG4gIENoYWluLFxuICBDaGFpbklkLFxuICBDdXJyZW5jeSxcbiAgQ3VycmVuY3lDb2RlLFxuICBJQkFOLFxuICBJQkFOc1Jlc3BvbnNlLFxuICBMaW5rQWRkcmVzcyxcbiAgTGlua2VkQWRkcmVzcyxcbiAgTW92ZUliYW5QYXlsb2FkLFxuICBOZXdPcmRlcixcbiAgT3JkZXIsXG4gIE9yZGVyc1Jlc3BvbnNlLFxuICBPcmRlclN0YXRlLFxuICBwYXJzZUNoYWluLFxuICBQcm9maWxlLFxuICBQcm9maWxlUGVybWlzc2lvbnMsXG4gIFByb2ZpbGVzUmVzcG9uc2UsXG4gIFJlcXVlc3RJYmFuUGF5bG9hZCxcbiAgUmVzcG9uc2VTdGF0dXMsXG4gIFN1Ym1pdFByb2ZpbGVEZXRhaWxzUGF5bG9hZCxcbiAgVG9rZW4sXG59IGZyb20gJ0Btb25lcml1bS9zZGsnO1xuXG5pbXBvcnQgeyBNb25lcml1bUNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHtcbiAgTXV0YXRpb25PcHRpb25zLFxuICBNdXRhdGlvblJlc3VsdCxcbiAgUXVlcnlPcHRpb25zLFxuICBVc2VBdXRoUmV0dXJuLFxufSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIFF1ZXJ5IGtleXMgZm9yIFJlYWN0IHF1ZXJ5XG4gKiAqL1xuZXhwb3J0IGNvbnN0IGtleXMgPSB7XG4gIGdldEFsbDogWydtb25lcml1bSddLFxuICBnZXRQcm9maWxlOiAocHJvZmlsZTogc3RyaW5nKSA9PiBbXG4gICAgJ21vbmVyaXVtJyxcbiAgICAncHJvZmlsZScsXG4gICAgLi4uKHByb2ZpbGUgPyBbcHJvZmlsZV0gOiBbXSksXG4gIF0sXG4gIGdldFByb2ZpbGVzOiBbJ21vbmVyaXVtJywgJ3Byb2ZpbGVzJ10sXG4gIGdldEFkZHJlc3M6IChhZGRyZXNzOiBzdHJpbmcpID0+IFsnbW9uZXJpdW0nLCAnYWRkcmVzcycsIFthZGRyZXNzXV0sXG4gIGdldEFkZHJlc3NlczogKGZpbHRlcj86IHVua25vd24pID0+IFtcbiAgICAnbW9uZXJpdW0nLFxuICAgICdhZGRyZXNzZXMnLFxuICAgIC4uLihmaWx0ZXIgPyBbZmlsdGVyXSA6IFtdKSxcbiAgXSxcbiAgZ2V0QmFsYW5jZXM6IChcbiAgICBhZGRyZXNzOiBzdHJpbmcsXG4gICAgY2hhaW46IENoYWluLFxuICAgIGN1cnJlbmNpZXM/OiBDdXJyZW5jeUNvZGUgfCBDdXJyZW5jeUNvZGVbXVxuICApID0+IFtcbiAgICAnbW9uZXJpdW0nLFxuICAgICdiYWxhbmNlcycsXG4gICAgYWRkcmVzcyxcbiAgICBjaGFpbixcbiAgICAuLi4oY3VycmVuY2llcyA/IFsuLi5jdXJyZW5jaWVzXSA6IFtdKSxcbiAgXSxcbiAgZ2V0SWJhbjogKGliYW46IHN0cmluZykgPT4gWydtb25lcml1bScsICdpYmFuJywgaWJhbl0sXG4gIGdldEliYW5zOiAoZmlsdGVyPzogdW5rbm93bikgPT4gW1xuICAgICdtb25lcml1bScsXG4gICAgJ2liYW5zJyxcbiAgICAuLi4oZmlsdGVyID8gW2ZpbHRlcl0gOiBbXSksXG4gIF0sXG4gIGdldFRva2VuczogWydtb25lcml1bScsICd0b2tlbnMnXSxcbiAgZ2V0T3JkZXI6IChvcmRlcklkOiBzdHJpbmcpID0+IFsnbW9uZXJpdW0nLCAnb3JkZXInLCBvcmRlcklkXSxcbiAgZ2V0T3JkZXJzOiAoZmlsdGVyPzogdW5rbm93bikgPT4gW1xuICAgICdtb25lcml1bScsXG4gICAgJ29yZGVycycsXG4gICAgLi4uKGZpbHRlciA/IFtmaWx0ZXJdIDogW10pLFxuICBdLFxuICBzdWJtaXRQcm9maWxlRGV0YWlsczogWydtb25lcml1bScsICdzdWJtaXQtcHJvZmlsZS1kZXRhaWxzJ10sXG4gIG1vdmVJYmFuOiBbJ21vbmVyaXVtJywgJ21vdmUtaWJhbiddLFxuICByZXF1ZXN0SWJhbjogWydtb25lcml1bScsICdyZXF1ZXN0LWliYW4nXSxcbiAgcGxhY2VPcmRlcjogWydtb25lcml1bScsICdwbGFjZS1vcmRlciddLFxuICBsaW5rQWRkcmVzczogWydtb25lcml1bScsICdsaW5rLWFkZHJlc3MnXSxcbn07XG5cbi8qKiBJbnRlcm5hbCBob29rIHRvIHVzZSBTREsgKi9cbmZ1bmN0aW9uIHVzZVNkaygpOiBNb25lcml1bUNsaWVudCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KE1vbmVyaXVtQ29udGV4dCk7XG5cbiAgaWYgKGNvbnRleHQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZVNkayBtdXN0IGJlIHVzZWQgd2l0aGluIGEgTW9uZXJpdW1Qcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0Py5zZGs7XG59XG5cbi8qKlxuICogIyBSZWRpcmVjdCB0byB0aGUgTW9uZXJpdW0gYXV0aCBmbG93LlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgQXV0aGVudGljYXRpb25cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgeyBhdXRob3JpemUsIGlzQXV0aG9yaXplZCwgaXNMb2FkaW5nLCBlcnJvciB9ID0gdXNlQXV0aCgpO1xuICpcbiAqIGF1dGhvcml6ZSgpOyAvLyBSZWRpcmVjdHMgdG8gdGhlIE1vbmVyaXVtIGF1dGggZmxvdy5cbiAqXG4gKiAvLyBPcHQtaW4gdG8gYXV0b21hdGVkIHdhbGxldCBsaW5raW5nIHdpdGggdGhlc2UgcGFyYW1ldGVycy5cbiAqIGF1dGhvcml6ZSh7IGFkZHJlc3MsIHNpZ25hdHVyZSwgY2hhaW4gfSkuXG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJucyB7VXNlQXV0aFJldHVybn1cbiAqIC0gYGF1dGhvcml6ZWAgIC0gUmVkaXJlY3RzIHRvIHRoZSBNb25lcml1bSBhdXRoIGZsb3cuXG4gKiAtIGBzaXdlYCAgICAgICAtIFNpZ24gaW4gd2l0aCBFdGhlcmV1bS4gaHR0cHM6Ly9tb25lcml1bS5jb20vc2l3ZVxuICogLSBgaXNBdXRob3JpemVkYCAtIFdoZXRoZXIgdGhlIHVzZXIgaXMgYXV0aG9yaXplZC5cbiAqIC0gYGlzTG9hZGluZ2AgLSBXaGV0aGVyIHRoZSBhdXRoIGZsb3cgaXMgbG9hZGluZy5cbiAqIC0gYGVycm9yYCAtIEVycm9yIG1lc3NhZ2UgaWYgdGhlIGF1dGggZmxvdyBmYWlscy5cbiAqIC0gYGRpc2Nvbm5lY3RgIC0gRGlzY29ubmVjdCB0aGUgdXNlci5cbiAqIC0gYHJldm9rZUFjY2Vzc2AgLSBSZXZva2UgdGhlIHVzZXIncyBhY2Nlc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBdXRoKCk6IFVzZUF1dGhSZXR1cm4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChNb25lcml1bUNvbnRleHQpO1xuXG4gIGlmIChjb250ZXh0ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VBdXRoIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBNb25lcml1bVByb3ZpZGVyJyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGlzQXV0aG9yaXplZDogY29udGV4dC5pc0F1dGhvcml6ZWQsXG4gICAgYXV0aG9yaXplOiBjb250ZXh0LmF1dGhvcml6ZSxcbiAgICBzaXdlOiBjb250ZXh0LnNpd2UsXG4gICAgaXNMb2FkaW5nOiBjb250ZXh0LmlzTG9hZGluZyxcbiAgICBlcnJvcjogY29udGV4dC5lcnJvcixcbiAgICBkaXNjb25uZWN0OiBjb250ZXh0LmRpc2Nvbm5lY3QsXG4gICAgcmV2b2tlQWNjZXNzOiBjb250ZXh0LnJldm9rZUFjY2VzcyxcbiAgfTtcbn1cblxuLyoqXG4gKiBJZiBubyBgcHJvZmlsZWAgaWQgaXMgcHJvdmlkZWQsIHRoZSBkZWZhdWx0IHByb2ZpbGUgaXMgdXNlZC5cbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IFByb2ZpbGVzXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZVByb2ZpbGUoKTtcbiAqIGBgYFxuXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vcHJvZmlsZSB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUHJvZmlsZSh7XG4gIHByb2ZpbGUsXG4gIHF1ZXJ5LFxufToge1xuICAvKiogVGhlIGlkIG9mIHRoZSBwcm9maWxlICovXG4gIHByb2ZpbGU/OiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxQcm9maWxlPjtcbn0gPSB7fSkge1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcblxuICBjb25zdCB7IGRhdGEgfSA9IHVzZVByb2ZpbGVzKCk7XG5cbiAgY29uc3QgcHJvZmlsZVRvVXNlID0gcHJvZmlsZSB8fCAoZGF0YT8ucHJvZmlsZXM/LlswXT8uaWQgYXMgc3RyaW5nKTtcblxuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldFByb2ZpbGUocHJvZmlsZVRvVXNlKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgaWYgKCFwcm9maWxlVG9Vc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9maWxlIElkIGlzIHJlcXVpcmVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0UHJvZmlsZShwcm9maWxlVG9Vc2UpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihcbiAgICAgIHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgcHJvZmlsZVRvVXNlICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKVxuICAgICksXG4gIH0pO1xufVxuLyoqXG4gKiAjIEdldCBwcm9maWxlc1xuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgUHJvZmlsZXNcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGRhdGEsXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZVByb2ZpbGVzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9wcm9maWxlcyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUHJvZmlsZXMoe1xuICBxdWVyeSxcbn06IHtcbiAgLyoqIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9ICovXG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPFByb2ZpbGVzUmVzcG9uc2U+O1xufSA9IHt9KSB7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuXG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0UHJvZmlsZXMsXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZGsuZ2V0UHJvZmlsZXMoKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGRhdGEsXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZVRva2VucygpO1xuICogYGBgXG5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi90b2tlbnMgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVRva2Vucyh7XG4gIHF1ZXJ5LFxufToge1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8VG9rZW5bXT47XG59ID0ge30pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0VG9rZW5zLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmdldFRva2VucygpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xufVxuXG4vKipcbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IEFkZHJlc3Nlc1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBcblxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VBZGRyZXNzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzLXYyI3RhZy9hZGRyZXNzZXMvb3BlcmF0aW9uL2FkZHJlc3MgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUFkZHJlc3Moe1xuICBhZGRyZXNzLFxuICBxdWVyeSA9IHt9LFxufToge1xuICAvKiogRmV0Y2ggYSBzcGVjaWZpYyBhZGRyZXNzLiAqL1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxBZGRyZXNzPjtcbn0pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRBZGRyZXNzKGFkZHJlc3MpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghYWRkcmVzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FkZHJlc3MgaXMgcmVxdWlyZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5nZXRBZGRyZXNzKGFkZHJlc3MpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihcbiAgICAgIHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgYWRkcmVzcyAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSlcbiAgICApLFxuICB9KTtcbn1cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgQWRkcmVzc2VzXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLnByb2ZpbGVdIEZpbHRlciBiYXNlZCBvbiBwcm9maWxlIGlkLlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXMuY2hhaW5dIEZpbHRlciBiYXNlZCBvbiBjaGFpbiAtIENVUlJFTlRMWSBSRVRVUk5TIEFOIEVSUk9SLlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VBZGRyZXNzZXMoKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3MtdjIjdGFnL2FkZHJlc3Nlcy9vcGVyYXRpb24vYWRkcmVzc2VzIHwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBZGRyZXNzZXMoe1xuICBwcm9maWxlLFxuICBjaGFpbixcbiAgcXVlcnkgPSB7fSxcbn06IHtcbiAgcHJvZmlsZT86IHN0cmluZztcbiAgY2hhaW4/OiBDaGFpbiB8IENoYWluSWQ7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxBZGRyZXNzZXNSZXNwb25zZT47XG59ID0ge30pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG5cbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcblxuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEFkZHJlc3Nlcyh7XG4gICAgICBwcm9maWxlLFxuICAgICAgY2hhaW46IGNoYWluID8gcGFyc2VDaGFpbihjaGFpbikgOiB1bmRlZmluZWQsXG4gICAgfSksXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZGsuZ2V0QWRkcmVzc2VzKHsgcHJvZmlsZSwgY2hhaW4gfSk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG4vKipcbiAqICMgR2V0IGJhbGFuY2UgZm9yIGEgYW4gYWRkcmVzcyBvbiBhIGdpdmUgY2hhaW5cbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IEFkZHJlc3Nlc1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8QmFsYW5jZXM+fSBwYXJhbXMuYWRkcmVzcyBUaGUgYWRkcmVzcyB0byBmZXRjaCB0aGUgYmFsYW5jZSBmb3IuXG4gKiBAcGFyYW0ge1F1ZXJ5T3B0aW9uczxCYWxhbmNlcz59IHBhcmFtcy5jaGFpbiBUaGUgY2hhaW4gdG8gZmV0Y2ggdGhlIGJhbGFuY2UgZm9yLlxuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8QmFsYW5jZXM+fSBbcGFyYW1zLmN1cnJlbmNpZXNdIE9uZSBvciBtYW55OiBgZXVyYCwgYHVzZGAsIGBnYnBgLCBgaXNrYFxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VCYWxhbmNlcygpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy92MiN0YWcvYWRkcmVzc2VzL29wZXJhdGlvbi9iYWxhbmNlcyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUJhbGFuY2VzKHtcbiAgYWRkcmVzcyxcbiAgY2hhaW4sXG4gIGN1cnJlbmNpZXMsXG4gIHF1ZXJ5LFxufToge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNoYWluOiBDaGFpbiB8IENoYWluSWQ7XG4gIGN1cnJlbmNpZXM/OiBDdXJyZW5jeSB8IEN1cnJlbmN5W107XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxCYWxhbmNlcz47XG59KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuXG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0QmFsYW5jZXMoYWRkcmVzcywgcGFyc2VDaGFpbihjaGFpbiksIGN1cnJlbmNpZXMpLFxuICAgIHN0YWxlVGltZTogMTAwMCAqIDYwICogNSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNkay5nZXRCYWxhbmNlcyhhZGRyZXNzLCBjaGFpbiwgY3VycmVuY2llcyk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG5cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgSUJBTnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlSUJBTigpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy12MiN0YWcvaWJhbnMvb3BlcmF0aW9uL2liYW4gfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlCQU4oe1xuICBpYmFuLFxuICBxdWVyeSxcbn06IHtcbiAgLyoqIEZldGNoIGEgc3BlY2lmaWMgSUJBTiAqL1xuICBpYmFuOiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxJQkFOPjtcbn0pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRJYmFuKGliYW4pLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0SWJhbihpYmFuKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiBpYmFuICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xufVxuLyoqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBJQkFOc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGRhdGEsXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZUlCQU5zKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzLXYyI3RhZy9pYmFucy9vcGVyYXRpb24vaWJhbnMgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlCQU5zKHtcbiAgcHJvZmlsZSxcbiAgY2hhaW4sXG4gIHF1ZXJ5ID0ge30sXG59OiB7XG4gIC8qKiBGZXRjaCBJQkFOcyBmb3IgYSBzcGVjaWZpYyBwcm9maWxlLiAqL1xuICBwcm9maWxlPzogc3RyaW5nO1xuICAvKiogRmV0Y2ggSUJBTnMgZm9yIGEgc3BlY2lmaWMgY2hhaW4uICovXG4gIGNoYWluPzogQ2hhaW4gfCBDaGFpbklkO1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8SUJBTnNSZXNwb25zZT47XG59ID0ge30pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRJYmFucyh7IHByb2ZpbGUsIGNoYWluIH0pLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0SWJhbnMoeyBwcm9maWxlLCBjaGFpbiB9KTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBPcmRlcnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlT3JkZXIoKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL29yZGVyfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU9yZGVyKHtcbiAgb3JkZXJJZCxcbiAgcXVlcnkgPSB7fSxcbn06IHtcbiAgLyoqICBUaGUgaWQgb2YgdGhlIG9yZGVyLiAqL1xuICBvcmRlcklkOiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxPcmRlcj47XG59KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldE9yZGVyKG9yZGVySWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICBpZiAoIW9yZGVySWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPcmRlciBpZCBpcyByZXF1aXJlZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLmdldE9yZGVyKG9yZGVySWQpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIG9yZGVySWQgJiYgKHF1ZXJ5LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBPcmRlcnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXMuYWRkcmVzc10gRmlsdGVyIGJhc2VkIG9uIHRoZSBibG9ja2NoYWluIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLm1lbW9dIEZpbHRlciBieSB0aGUgcGF5bWVudCBtZW1vL3JlZmVyZW5jZS4uXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy5wcm9maWxlXSBGaWx0ZXIgYmFzZWQgb24gdGhlIHByb2ZpbGUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLnN0YXRlXSBGaWx0ZXIgYmFzZWQgb24gdGhlIHN0YXRlIG9mIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLnR4SGFzaF0gRmlsdGVyIGJhc2VkIG9uIHRoZSBibG9ja2NoYWluIHRyYW5zYWN0aW9uIGhhc2guXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VPcmRlcnMoKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL29yZGVycyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlT3JkZXJzKHtcbiAgcXVlcnkgPSB7fSxcbiAgLi4uZmlsdGVyc1xufToge1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8T3JkZXJzUmVzcG9uc2U+O1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICB0eEhhc2g/OiBzdHJpbmc7XG4gIHByb2ZpbGU/OiBzdHJpbmc7XG4gIG1lbW8/OiBzdHJpbmc7XG4gIHN0YXRlPzogT3JkZXJTdGF0ZTtcbn0gPSB7fSkge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRPcmRlcnMoZmlsdGVycyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5nZXRPcmRlcnMoZmlsdGVycyk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBTdWJtaXQgdGhlIHJlcXVpcmVkIGNvbXBsaWFuY2UgaW5mb3JtYXRpb24gdG8gb25ib2FyZCB0aGUgY3VzdG9tZXIuXG4gKlxuICogTm90ZSB0aGF0IHlvdSB3b24ndCBiZSBhYmxlIHRvIGNoYW5nZSB0aGUgcHJvZmlsZSBcImtpbmRcIiBmcm9tIHBlcnNvbmFsIHRvIGNvcnBvcmF0ZSBvciB2aWNlIHZlcnNhIG9uY2UgdGhlIHByb2ZpbGUgaGFzIGJlZW4gYXBwcm92ZWQuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBQcm9maWxlc1xuICogQHBhcmFtIHBhcmFtXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW0ucHJvZmlsZSBUaGUgaWQgb2YgdGhlIHByb2ZpbGUgdG8gc3VibWl0IHRvLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgc3VibWl0UHJvZmlsZURldGFpbHMsIC8vIHVzZU11dGF0aW9uJ3MgYG11dGF0ZUFzeW5jYCBwcm9wZXJ0eVxuICogICAgaXNQZW5kaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgc3RhdHVzLFxuICogICAgLi4ubW9yZVVzZU11dGF0aW9uUmVzdWx0c1xuICogfSA9IHVzZVN1Ym1pdFByb2ZpbGVEZXRhaWxzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzLXYyI3RhZy9wcm9maWxlcy9vcGVyYXRpb24vcHJvZmlsZS1kZXRhaWxzIHwgQVBJIERvY3VtZW50YXRpb259fVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTdWJtaXRQcm9maWxlRGV0YWlscyh7XG4gIHByb2ZpbGUsXG4gIG11dGF0aW9uID0ge30sXG59OiB7XG4gIHByb2ZpbGU6IHN0cmluZztcbiAgLyoqIHtAaW5oZXJpdERvYyBNdXRhdGlvbk9wdGlvbnN9ICovXG4gIG11dGF0aW9uPzogTXV0YXRpb25PcHRpb25zPFxuICAgIFJlc3BvbnNlU3RhdHVzLFxuICAgIEVycm9yLFxuICAgIFN1Ym1pdFByb2ZpbGVEZXRhaWxzUGF5bG9hZFxuICA+O1xufSk6IE11dGF0aW9uUmVzdWx0PFxuICAnc3VibWl0UHJvZmlsZURldGFpbHMnLFxuICBSZXNwb25zZVN0YXR1cyxcbiAgRXJyb3IsXG4gIFN1Ym1pdFByb2ZpbGVEZXRhaWxzUGF5bG9hZFxuPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgeyBtdXRhdGVBc3luYywgLi4ucmVzdCB9ID0gdXNlTXV0YXRpb24oe1xuICAgIC4uLm11dGF0aW9uLFxuICAgIG11dGF0aW9uS2V5OiBrZXlzLnN1Ym1pdFByb2ZpbGVEZXRhaWxzLFxuICAgIG11dGF0aW9uRm46IGFzeW5jIChib2R5OiBTdWJtaXRQcm9maWxlRGV0YWlsc1BheWxvYWQpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuc3VibWl0UHJvZmlsZURldGFpbHMocHJvZmlsZSwgYm9keSk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3MoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KSB7XG4gICAgICAvLyBSZWZldGNoIGFsbCBvcmRlcnMgb24gc3VjY2Vzcy5cbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgcXVlcnlLZXk6IGtleXMuZ2V0UHJvZmlsZShwcm9maWxlKSxcbiAgICAgIH0pO1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIHN1Y2Nlc3MuXG4gICAgICBtdXRhdGlvbj8ub25TdWNjZXNzPy4oZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KTtcbiAgICB9LFxuICAgIG9uRXJyb3IoZXJyb3IsIHZhcnMsIGNvbnRleHQpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBlcnJvci5cbiAgICAgIG11dGF0aW9uPy5vbkVycm9yPy4oZXJyb3IsIHZhcnMsIGNvbnRleHQpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgc3VibWl0UHJvZmlsZURldGFpbHM6IG11dGF0ZUFzeW5jLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG4vKipcbiAqIENyZWF0ZSBhbiBJQkFOIGZvciBhIHNwZWNpZmllZCBhZGRyZXNzIGFuZCBjaGFpbi5cbiAqIEFsbCBpbmNvbWluZyBFVVIgcGF5bWVudHMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHJvdXRlZCB0byB0aGUgbGlua2VkIGFkZHJlc3Mgb24gdGhhdCBjaGFpbi5cbiAqIEFueSBsaW5rZWQgYWRkcmVzcyBjYW4gdXNlIHRoaXMgSUJBTiBmb3Igb3V0Z29pbmcgcGF5bWVudHMuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBJQkFOc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICByZXF1ZXN0SWJhbiwgLy8gdXNlTXV0YXRpb24ncyBgbXV0YXRlQXN5bmNgIHByb3BlcnR5XG4gKiAgICBpc1BlbmRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICBzdGF0dXMsXG4gKiAgICAuLi5tb3JlVXNlTXV0YXRpb25SZXN1bHRzXG4gKiB9ID0gdXNlUmVxdWVzdEliYW4oKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3MtdjIjdGFnL2liYW5zL29wZXJhdGlvbi9yZXF1ZXN0LWliYW4gfCBBUEkgRG9jdW1lbnRhdGlvbn19XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlcXVlc3RJYmFuKHtcbiAgbXV0YXRpb24gPSB7fSxcbn06IHtcbiAgLyoqIHtAaW5oZXJpdERvYyBNdXRhdGlvbk9wdGlvbnN9ICovXG4gIG11dGF0aW9uPzogTXV0YXRpb25PcHRpb25zPFJlc3BvbnNlU3RhdHVzLCBFcnJvciwgUmVxdWVzdEliYW5QYXlsb2FkPjtcbn0gPSB7fSk6IE11dGF0aW9uUmVzdWx0PFxuICAncmVxdWVzdEliYW4nLFxuICBSZXNwb25zZVN0YXR1cyxcbiAgRXJyb3IsXG4gIFJlcXVlc3RJYmFuUGF5bG9hZFxuPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuXG4gIGNvbnN0IHsgbXV0YXRlQXN5bmMsIC4uLnJlc3QgfSA9IHVzZU11dGF0aW9uKHtcbiAgICAuLi5tdXRhdGlvbixcbiAgICBtdXRhdGlvbktleToga2V5cy5yZXF1ZXN0SWJhbixcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoe1xuICAgICAgYWRkcmVzcyxcbiAgICAgIGNoYWluLFxuICAgICAgZW1haWxOb3RpZmljYXRpb25zLFxuICAgIH06IFJlcXVlc3RJYmFuUGF5bG9hZCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5yZXF1ZXN0SWJhbih7IGFkZHJlc3MsIGNoYWluLCBlbWFpbE5vdGlmaWNhdGlvbnMgfSk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3MoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KSB7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gc3VjY2Vzcy5cbiAgICAgIG11dGF0aW9uPy5vblN1Y2Nlc3M/LihkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuICAgIH0sXG4gICAgb25FcnJvcihlcnJvciwgdmFycywgY29udGV4dCkge1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIGVycm9yLlxuICAgICAgbXV0YXRpb24/Lm9uRXJyb3I/LihlcnJvciwgdmFycywgY29udGV4dCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICByZXF1ZXN0SWJhbjogbXV0YXRlQXN5bmMsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cbi8qKlxuICogTW92ZSBhbiBleGlzdGluZyBJQkFOIHRvIGEgc3BlY2lmaWVkIGFkZHJlc3MgYW4gY2hhaW4uXG4gKiBBbGwgaW5jb21pbmcgRVVSIHBheW1lbnRzIHdpbGwgYXV0b21hdGljYWxseSBiZSByb3V0ZWQgdG8gdGhlIGFkZHJlc3Mgb24gdGhhdCBjaGFpbi5cbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IElCQU5zXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIG1vdmVJYmFuLCAvLyB1c2VNdXRhdGlvbidzIGBtdXRhdGVBc3luY2AgcHJvcGVydHlcbiAqICAgIGlzUGVuZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHN0YXR1cyxcbiAqICAgIC4uLm1vcmVVc2VNdXRhdGlvblJlc3VsdHNcbiAqIH0gPSB1c2VNb3ZlSWJhbigpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy92MiN0YWcvaWJhbnMvb3BlcmF0aW9uL21vdmUtaWJhbiB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VNb3ZlSWJhbih7XG4gIG11dGF0aW9uID0ge30sXG59OiB7XG4gIC8qKiB7QGluaGVyaXREb2MgTXV0YXRpb25PcHRpb25zfSAqL1xuICBtdXRhdGlvbj86IE11dGF0aW9uT3B0aW9uczxcbiAgICBSZXNwb25zZVN0YXR1cyxcbiAgICBFcnJvcixcbiAgICBNb3ZlSWJhblBheWxvYWQgJiB7IGliYW46IHN0cmluZyB9XG4gID47XG59ID0ge30pOiBNdXRhdGlvblJlc3VsdDxcbiAgJ21vdmVJYmFuJyxcbiAgUmVzcG9uc2VTdGF0dXMsXG4gIEVycm9yLFxuICBNb3ZlSWJhblBheWxvYWQgJiB7IGliYW46IHN0cmluZyB9XG4+IHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICBjb25zdCB7IG11dGF0ZUFzeW5jLCAuLi5yZXN0IH0gPSB1c2VNdXRhdGlvbih7XG4gICAgLi4ubXV0YXRpb24sXG4gICAgbXV0YXRpb25LZXk6IGtleXMubW92ZUliYW4sXG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHtcbiAgICAgIGliYW4sXG4gICAgICBhZGRyZXNzLFxuICAgICAgY2hhaW4sXG4gICAgfTogTW92ZUliYW5QYXlsb2FkICYgeyBpYmFuOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5tb3ZlSWJhbihpYmFuLCB7IGFkZHJlc3MsIGNoYWluIH0pO1xuICAgIH0sXG4gICAgb25TdWNjZXNzKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCkge1xuICAgICAgLy8gUmVmZXRjaCBhbGwgb3JkZXJzIG9uIHN1Y2Nlc3MuXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEliYW4odmFyaWFibGVzLmliYW4pLFxuICAgICAgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEliYW5zKCksXG4gICAgICB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgcXVlcnlLZXk6IGtleXMuZ2V0QWRkcmVzcyh2YXJpYWJsZXMuYWRkcmVzcyksXG4gICAgICB9KTtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBzdWNjZXNzLlxuICAgICAgbXV0YXRpb24/Lm9uU3VjY2Vzcz8uKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCk7XG4gICAgfSxcbiAgICBvbkVycm9yKGVycm9yLCB2YXJzLCBjb250ZXh0KSB7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gZXJyb3IuXG4gICAgICBtdXRhdGlvbj8ub25FcnJvcj8uKGVycm9yLCB2YXJzLCBjb250ZXh0KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0sXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIG1vdmVJYmFuOiBtdXRhdGVBc3luYyxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuLyoqXG4gKiBXaGVuIHRoZSBvcmRlciBoYXMgYmVlbiBwbGFjZWQsIHRoZSBvcmRlcnMgcXVlcnkgd2lsbCBiZSBpbnZhbGlkYXRlZCBhbmQgcmUtZmV0Y2hlZC5cbiAqXG4gKiBJZiB0aGUgb3JkZXIgYW1vdW50IGlzIGFib3ZlIDE1MDAwLCBhIHN1cHBvcnRpbmcgZG9jdW1lbnQgaXMgcmVxdWlyZWQuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBPcmRlcnNcbiAqIEBwYXJhbSBwYXJhbVxuICogQHBhcmFtIHtGaWxlfSBwYXJhbS5zdXBwb3J0aW5nRG9jdW1lbnQgU3VwcG9ydGluZyBkb2N1bWVudCBmaWxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgcGxhY2VPcmRlciwgLy8gdXNlTXV0YXRpb24ncyBgbXV0YXRlQXN5bmNgIHByb3BlcnR5XG4gKiAgICBpc1BlbmRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICBzdGF0dXMsXG4gKiAgICAuLi5tb3JlVXNlTXV0YXRpb25SZXN1bHRzXG4gKiB9ID0gdXNlUGxhY2VPcmRlcigpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vcG9zdC1vcmRlcnN8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VQbGFjZU9yZGVyKHtcbiAgc3VwcG9ydGluZ0RvY3VtZW50LFxuICBtdXRhdGlvbixcbn06IHtcbiAgc3VwcG9ydGluZ0RvY3VtZW50PzogRmlsZTtcbiAgLyoqIHtAaW5oZXJpdERvYyBNdXRhdGlvbk9wdGlvbnN9ICovXG4gIG11dGF0aW9uPzogTXV0YXRpb25PcHRpb25zPE9yZGVyLCBFcnJvciwgTmV3T3JkZXI+O1xufSA9IHt9KTogTXV0YXRpb25SZXN1bHQ8J3BsYWNlT3JkZXInLCBPcmRlciwgRXJyb3IsIE5ld09yZGVyPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgeyBtdXRhdGVBc3luYywgLi4ucmVzdCB9ID0gdXNlTXV0YXRpb24oe1xuICAgIC4uLm11dGF0aW9uLFxuICAgIG11dGF0aW9uS2V5OiBrZXlzLnBsYWNlT3JkZXIsXG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGJvZHk6IE5ld09yZGVyKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgbGV0IGRvY3VtZW50SWQ7XG4gICAgICBpZiAocGFyc2VJbnQoYm9keS5hbW91bnQpID4gMTUwMDApIHtcbiAgICAgICAgaWYgKCFzdXBwb3J0aW5nRG9jdW1lbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnU3VwcG9ydGluZyBkb2N1bWVudCBpcyByZXF1aXJlZCBmb3Igb3JkZXJzIGFib3ZlIDE1MDAwJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBsb2FkZWREb2N1bWVudCA9XG4gICAgICAgICAgYXdhaXQgc2RrLnVwbG9hZFN1cHBvcnRpbmdEb2N1bWVudChzdXBwb3J0aW5nRG9jdW1lbnQpO1xuICAgICAgICBkb2N1bWVudElkID0gdXBsb2FkZWREb2N1bWVudC5pZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3Qm9keSA9IHtcbiAgICAgICAgLi4uYm9keSxcbiAgICAgICAgZG9jdW1lbnRJZDogZG9jdW1lbnRJZCxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBzZGsucGxhY2VPcmRlcihuZXdCb2R5KTtcbiAgICB9LFxuICAgIG9uU3VjY2VzcyhkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpIHtcbiAgICAgIC8vIFJlZmV0Y2ggYWxsIG9yZGVycyBvbiBzdWNjZXNzLlxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICBxdWVyeUtleToga2V5cy5nZXRPcmRlcnMoKSxcbiAgICAgIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICBxdWVyeUtleToga2V5cy5nZXRCYWxhbmNlcyhkYXRhLmFkZHJlc3MsIGRhdGEuY2hhaW4pLFxuICAgICAgfSk7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gc3VjY2Vzcy5cbiAgICAgIG11dGF0aW9uPy5vblN1Y2Nlc3M/LihkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuICAgIH0sXG4gICAgb25FcnJvcihlcnJvciwgdmFycywgY29udGV4dCkge1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIGVycm9yLlxuICAgICAgbXV0YXRpb24/Lm9uRXJyb3I/LihlcnJvciwgdmFycywgY29udGV4dCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBwbGFjZU9yZGVyOiBtdXRhdGVBc3luYyxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuLyoqXG4gKiAjIEFkZCBhZGRyZXNzIHRvIHByb2ZpbGUuXG4gKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgUHJvZmlsZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgbGlua0FkZHJlc3MsIC8vIHVzZU11dGF0aW9uJ3MgYG11dGF0ZUFzeW5jYCBwcm9wZXJ0eVxuICogICAgaXNQZW5kaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgc3RhdHVzLFxuICogICAgLi4ubW9yZVVzZU11dGF0aW9uUmVzdWx0c1xuICogfSA9IHVzZUxpbmtBZGRyZXNzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9wcm9maWxlLWFkZHJlc3NlcyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VMaW5rQWRkcmVzcyh7XG4gIG11dGF0aW9uLFxufToge1xuICAvKioge0Bpbmhlcml0RG9jIE11dGF0aW9uT3B0aW9uc30gKi9cbiAgbXV0YXRpb24/OiBNdXRhdGlvbk9wdGlvbnM8TGlua2VkQWRkcmVzcywgRXJyb3IsIExpbmtBZGRyZXNzPjtcbn0gPSB7fSk6IE11dGF0aW9uUmVzdWx0PCdsaW5rQWRkcmVzcycsIExpbmtlZEFkZHJlc3MsIEVycm9yLCBMaW5rQWRkcmVzcz4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIGNvbnN0IHsgbXV0YXRlQXN5bmMsIC4uLnJlc3QgfSA9IHVzZU11dGF0aW9uKHtcbiAgICAuLi5tdXRhdGlvbixcbiAgICBtdXRhdGlvbktleToga2V5cy5saW5rQWRkcmVzcyxcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoYm9keTogTGlua0FkZHJlc3MpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmxpbmtBZGRyZXNzKGJvZHkpO1xuICAgIH0sXG4gICAgb25TdWNjZXNzKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCkge1xuICAgICAgLy8gUmVmZXRjaCBhbGwgb3JkZXJzIG9uIHN1Y2Nlc3MuXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEFkZHJlc3NlcygpLFxuICAgICAgfSk7XG4gICAgICBpZiAodmFyaWFibGVzLnByb2ZpbGUpIHtcbiAgICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldFByb2ZpbGUodmFyaWFibGVzLnByb2ZpbGUpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBzdWNjZXNzLlxuICAgICAgbXV0YXRpb24/Lm9uU3VjY2Vzcz8uKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCk7XG4gICAgfSxcbiAgICBvbkVycm9yKGVycm9yLCB2YXJzLCBjb250ZXh0KSB7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gZXJyb3IuXG4gICAgICBtdXRhdGlvbj8ub25FcnJvcj8uKGVycm9yLCB2YXJzLCBjb250ZXh0KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0sXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGxpbmtBZGRyZXNzOiBtdXRhdGVBc3luYyxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuXG4vKipcbiAqIEFQSSBjb25zdW1lcnMgaGF2ZSB0aGUgb3B0aW9uIHRvIHN1YnNjcmliZSB0byBhIFdlYlNvY2tldCBmb3IgcmVhbC10aW1lIG9yZGVyIG5vdGlmaWNhdGlvbnMuIFRoaXMgV2ViU29ja2V0IGNvbXBsaWVzIHdpdGggdGhlIHN0YW5kYXJkIFdlYlNvY2tldCBQcm90b2NvbCwgYWxsb3dpbmcgdGhlIHVzZSBvZiBzdGFuZGFyZCBXZWJTb2NrZXQgbGlicmFyaWVzIGZvciBzdWJzY3JpcHRpb24uXG4gKlxuICogVGhlIFdlYlNvY2tldCBlbWl0cyBhbiBldmVudCB3aGVuIGEgb3JkZXIgY2hhbmdlcyBzdGF0ZTpcbiAqXG4gKiBgcGxhY2VkYDogVGhlIG9yZGVyIGhhcyBiZWVuIGNyZWF0ZWQgYnV0IG5vdCB5ZXQgcHJvY2Vzc2VkLlxuICpcbiAqIGBwZW5kaW5nYDogVGhlIG9yZGVyIGlzIGF3YWl0aW5nIGZ1bGZpbGxtZW50IChlLmcuLCByZXZpZXcsIG1pbnRpbmcvYnVybmluZyB0b2tlbnMsIG9yIHNlbmRpbmcvcmVjZWl2aW5nIFNFUEEgcGF5bWVudCkuXG4gKlxuICogYHByb2Nlc3NlZGA6IFRoZSBvcmRlciBoYXMgYmVlbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICpcbiAqIGByZWplY3RlZGA6IFRoZSBvcmRlciB3YXMgcmVqZWN0ZWQsIHBvc3NpYmx5IGR1ZSB0byBjb21wbGlhbmNlIHJlYXNvbnMgb3IgaW5zdWZmaWNpZW50IGZ1bmRzLlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgT3JkZXJzXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKiBAcGFyYW0ge09yZGVyU3RhdGV9IFtwYXJhbXMuc3RhdGVdIEZpbHRlciBiYXNlZCBvbiB0aGUgc3RhdGUgb2YgdGhlIG9yZGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMucHJvZmlsZV0gRmlsdGVyIGJhc2VkIG9uIHRoZSBwcm9maWxlIGlkIG9mIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmFtcy5vbk1lc3NhZ2UgQ2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBvcmRlciBub3RpZmljYXRpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFyYW1zLm9uRXJyb3JdIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgZXJyb3Igbm90aWZpY2F0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgc3RhdGUsXG4gKiAgICBwcm9maWxlLFxuICogICAgb25NZXNzYWdlLFxuICogICAgb25FcnJvclxuICogfSA9IHVzZVN1YnNjcmliZU9yZGVyTm90aWZpY2F0aW9uKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzL3YxI29wZXJhdGlvbi9vcmRlcnMtbm90aWZpY2F0aW9uc3wgQVBJIERvY3VtZW50YXRpb259XG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFVuc3Vic2NyaWJlIGZyb20gb3JkZXIgbm90aWZpY2F0aW9ucy5cbiAqL1xuXG5leHBvcnQgY29uc3QgdXNlU3Vic2NyaWJlT3JkZXJOb3RpZmljYXRpb24gPSAoe1xuICBzdGF0ZSxcbiAgcHJvZmlsZSxcbiAgb25NZXNzYWdlLFxuICBvbkVycm9yLFxufToge1xuICBzdGF0ZT86IE9yZGVyU3RhdGU7XG4gIHByb2ZpbGU/OiBzdHJpbmc7XG4gIG9uTWVzc2FnZTogKG9yZGVyOiBPcmRlcikgPT4gdm9pZDtcbiAgb25FcnJvcj86ICgoZXJyOiBFdmVudCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG59KSA9PiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNkaykge1xuICAgICAgc2RrLnN1YnNjcmliZU9yZGVyTm90aWZpY2F0aW9ucyh7XG4gICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICBwcm9maWxlOiBwcm9maWxlLFxuICAgICAgICB9LFxuICAgICAgICBvbk1lc3NhZ2U6IG9uTWVzc2FnZSxcbiAgICAgICAgb25FcnJvcjogb25FcnJvcixcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgLyoqXG4gICAgICAgKiBOb3RlIHRoYXQgaW4gZGV2ZWxvcG1lbnQgbW9kZSwgUmVhY3QgU3RyaWN0IG1vZGUgd2lsbCBjYXVzZSB0aGlzXG4gICAgICAgKiBjbGVhbnVwIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB0d2ljZSBvbiBjbGllbnQgc2lkZSByb3V0ZSBjaGFuZ2VzLlxuICAgICAgICogU28gYSBzb2NrZXQgd2lsbCBiZSBpbW1lZGlhdGVseSBjbG9zZWQgYW5kIG9wZW5lZCBhZ2Fpbi5cbiAgICAgICAqIFRoaXMgaXMgbm90IGFuIGlzc3VlIGluIHByb2R1Y3Rpb24gbW9kZS5cbiAgICAgICAqL1xuICAgICAgaWYgKHNkaykge1xuICAgICAgICBzZGs/LnVuc3Vic2NyaWJlT3JkZXJOb3RpZmljYXRpb25zKHsgc3RhdGU6IHN0YXRlLCBwcm9maWxlOiBwcm9maWxlIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtzZGssIHByb2ZpbGUsIHN0YXRlXSk7XG5cbiAgcmV0dXJuICgpID0+XG4gICAgc2RrPy51bnN1YnNjcmliZU9yZGVyTm90aWZpY2F0aW9ucyh7IHN0YXRlOiBzdGF0ZSwgcHJvZmlsZTogcHJvZmlsZSB9KTtcbn07XG5cbi8qKiBFeHBvcnQgdHlwZXMgZm9yIGRvY3VtZW50YXRpb24gKi9cbmV4cG9ydCB0eXBlIHtcbiAgQWRkcmVzcyxcbiAgQmFsYW5jZXMsXG4gIElCQU4sXG4gIE1vdmVJYmFuUGF5bG9hZCxcbiAgTGlua0FkZHJlc3MsXG4gIFByb2ZpbGUsXG4gIFRva2VuLFxuICBTdWJtaXRQcm9maWxlRGV0YWlsc1BheWxvYWQsXG4gIE5ld09yZGVyLFxuICBSZXNwb25zZVN0YXR1cyxcbiAgT3JkZXIsXG59O1xuIl19
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import {createContext,useState,useEffect,useCallback,useContext}from'react';import {useQueryClient,useQuery,useMutation}from'@tanstack/react-query';import {MoneriumClient,parseChain}from'@monerium/sdk';import {jsx}from'react/jsx-runtime';var w=createContext(null);var J=({children:e,clientId:r,redirectUri:n,environment:o="sandbox",refreshToken:i,onRefreshTokenUpdate:a,debug:u=false})=>{let s=useQueryClient(),[t]=useState(()=>new MoneriumClient({environment:o,clientId:r,redirectUri:n,debug:u})),[f,p]=useState(false),[q,E]=useState(null),[k,I]=useState(true);useEffect(()=>((async()=>{if(t)try{p(await t.getAccess());}catch(h){console.error("Failed to get access:",h);}finally{I(false),t?.bearerProfile&&a?.(t.bearerProfile.refresh_token);}})(),()=>{t&&t.disconnect();}),[]),useEffect(()=>{i&&!f&&!k&&(async()=>{if(t)try{p(await t.getAccess(i));}catch(h){console.error("Failed to get access:",h);}finally{t?.bearerProfile&&a?.(t.bearerProfile.refresh_token);}})();},[i]);let z=useCallback(async m=>{try{t&&await t.authorize(m);}catch(h){console.error("Error during authorization:",h),E(h);}},[t]),K=useCallback(async m=>{try{t&&await t.siwe(m);}catch(h){console.error("Error during sign in with ethereum:",h),E(h);}},[t]),C=async()=>{try{t&&await t.revokeAccess();}catch(m){console.error("Error during revoking access:",m),E(m);}finally{s.clear(),p(false);}};return jsx(w.Provider,{value:{sdk:t,authorize:z,siwe:K,isAuthorized:f,isLoading:k,error:q,disconnect:async()=>t?.disconnect(),revokeAccess:async()=>C()},children:e})};var d={getAll:["monerium"],getProfile:e=>["monerium","profile",...e?[e]:[]],getProfiles:["monerium","profiles"],getAddress:e=>["monerium","address",[e]],getAddresses:e=>["monerium","addresses",...e?[e]:[]],getBalances:(e,r,n)=>["monerium","balances",e,r,...n?[...n]:[]],getIban:e=>["monerium","iban",e],getIbans:e=>["monerium","ibans",...e?[e]:[]],getTokens:["monerium","tokens"],getOrder:e=>["monerium","order",e],getOrders:e=>["monerium","orders",...e?[e]:[]],submitProfileDetails:["monerium","submit-profile-details"],moveIban:["monerium","move-iban"],requestIban:["monerium","request-iban"],placeOrder:["monerium","place-order"],linkAddress:["monerium","link-address"]};function c(){let e=useContext(w);if(e===null)throw new Error("useSdk must be used within a MoneriumProvider");return e?.sdk}function l(){let e=useContext(w);if(e===null)throw new Error("useAuth must be used within a MoneriumProvider");return {isAuthorized:e.isAuthorized,authorize:e.authorize,siwe:e.siwe,isLoading:e.isLoading,error:e.error,disconnect:e.disconnect,revokeAccess:e.revokeAccess}}function Pe({profile:e,query:r}={}){let{isAuthorized:n}=l(),o=c(),{data:i}=B(),a=e||i?.profiles?.[0]?.id;return useQuery({...r,queryKey:d.getProfile(a),queryFn:async()=>{if(!o)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");if(!a)throw new Error("Profile Id is required");return o.getProfile(a)},enabled:!!(o&&n&&a&&(r?.enabled??true))})}function B({query:e}={}){let{isAuthorized:r}=l(),n=c();return useQuery({...e,queryKey:d.getProfiles,queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!r)throw new Error("User not authorized");return n.getProfiles()},enabled:!!(n&&r&&(e?.enabled??true))})}function Se({query:e}={}){let r=c(),{isAuthorized:n}=l();return useQuery({...e,queryKey:d.getTokens,queryFn:async()=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.getTokens()},enabled:!!(r&&n&&(e?.enabled??true))})}function ve({address:e,query:r={}}){let n=c(),{isAuthorized:o}=l();return useQuery({...r,queryKey:d.getAddress(e),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");if(!e)throw new Error("Address is required");return n.getAddress(e)},enabled:!!(n&&o&&e&&(r?.enabled??true))})}function qe({profile:e,chain:r,query:n={}}={}){let o=c(),{isAuthorized:i}=l();return useQuery({...n,queryKey:d.getAddresses({profile:e,chain:r?parseChain(r):undefined}),queryFn:async()=>{if(!o)throw new Error("No SDK instance available");if(!i)throw new Error("User not authorized");return o.getAddresses({profile:e,chain:r})},enabled:!!(o&&i&&(n?.enabled??true))})}function Ie({address:e,chain:r,currencies:n,query:o}){let i=c(),{isAuthorized:a}=l();return useQuery({...o,queryKey:d.getBalances(e,parseChain(r),n),staleTime:1e3*60*5,queryFn:async()=>{if(!i)throw new Error("No SDK instance available");if(!a)throw new Error("User not authorized");return i.getBalances(e,r,n)},enabled:!!(i&&a&&(o?.enabled??true))})}function ze({iban:e,query:r}){let n=c(),{isAuthorized:o}=l();return useQuery({...r,queryKey:d.getIban(e),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");return n.getIban(e)},enabled:!!(n&&o&&e&&(r?.enabled??true))})}function Ke({profile:e,chain:r,query:n={}}={}){let o=c(),{isAuthorized:i}=l();return useQuery({...n,queryKey:d.getIbans({profile:e,chain:r}),queryFn:async()=>{if(!o)throw new Error("No SDK instance available");if(!i)throw new Error("User not authorized");return o.getIbans({profile:e,chain:r})},enabled:!!(o&&i&&(n?.enabled??true))})}function Ce({orderId:e,query:r={}}){let n=c(),{isAuthorized:o}=l();return useQuery({...r,queryKey:d.getOrder(e),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");if(!e)throw new Error("Order id is required");return n.getOrder(e)},enabled:!!(n&&o&&e&&(r.enabled??true))})}function xe({query:e={},...r}={}){let n=c(),{isAuthorized:o}=l();return useQuery({...e,queryKey:d.getOrders(r),queryFn:async()=>{if(!n)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");return n.getOrders(r)},enabled:!!(n&&o&&(e.enabled??true))})}function Ne({profile:e,mutation:r={}}){let n=c(),{isAuthorized:o}=l(),i=useQueryClient(),{mutateAsync:a,...u}=useMutation({...r,mutationKey:d.submitProfileDetails,mutationFn:async s=>{if(!n)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");return n.submitProfileDetails(e,s)},onSuccess(s,t,f){i.invalidateQueries({queryKey:d.getProfile(e)}),r?.onSuccess?.(s,t,f);},onError(s,t,f){throw r?.onError?.(s,t,f),s}});return {submitProfileDetails:a,...u}}function Re({mutation:e={}}={}){let r=c(),{isAuthorized:n}=l(),{mutateAsync:o,...i}=useMutation({...e,mutationKey:d.requestIban,mutationFn:async({address:a,chain:u,emailNotifications:s})=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.requestIban({address:a,chain:u,emailNotifications:s})},onSuccess(a,u,s){e?.onSuccess?.(a,u,s);},onError(a,u,s){throw e?.onError?.(a,u,s),a}});return {requestIban:o,...i}}function Me({mutation:e={}}={}){let r=c(),{isAuthorized:n}=l(),o=useQueryClient(),{mutateAsync:i,...a}=useMutation({...e,mutationKey:d.moveIban,mutationFn:async({iban:u,address:s,chain:t})=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.moveIban(u,{address:s,chain:t})},onSuccess(u,s,t){o.invalidateQueries({queryKey:d.getIban(s.iban)}),o.invalidateQueries({queryKey:d.getIbans()}),o.invalidateQueries({queryKey:d.getAddress(s.address)}),e?.onSuccess?.(u,s,t);},onError(u,s,t){throw e?.onError?.(u,s,t),u}});return {moveIban:i,...a}}function De({supportingDocument:e,mutation:r}={}){let n=c(),{isAuthorized:o}=l(),i=useQueryClient(),{mutateAsync:a,...u}=useMutation({...r,mutationKey:d.placeOrder,mutationFn:async s=>{if(!n)throw new Error("No SDK instance available");if(!o)throw new Error("User not authorized");let t;if(parseInt(s.amount)>15e3){if(!e)throw new Error("Supporting document is required for orders above 15000");t=(await n.uploadSupportingDocument(e)).id;}let f={...s,documentId:t};return n.placeOrder(f)},onSuccess(s,t,f){i.invalidateQueries({queryKey:d.getOrders()}),i.invalidateQueries({queryKey:d.getBalances(s.address,s.chain)}),r?.onSuccess?.(s,t,f);},onError(s,t,f){throw r?.onError?.(s,t,f),s}});return {placeOrder:a,...u}}function Be({mutation:e}={}){let r=c(),{isAuthorized:n}=l(),o=useQueryClient(),{mutateAsync:i,...a}=useMutation({...e,mutationKey:d.linkAddress,mutationFn:async u=>{if(!r)throw new Error("No SDK instance available");if(!n)throw new Error("User not authorized");return r.linkAddress(u)},onSuccess(u,s,t){o.invalidateQueries({queryKey:d.getAddresses()}),s.profile&&o.invalidateQueries({queryKey:d.getProfile(s.profile)}),e?.onSuccess?.(u,s,t);},onError(u,s,t){throw e?.onError?.(u,s,t),u}});return {linkAddress:i,...a}}var Fe=({state:e,profile:r,onMessage:n,onError:o})=>{let i=c();return useEffect(()=>(i&&i.subscribeOrderNotifications({filter:{state:e,profile:r},onMessage:n,onError:o}),()=>{i&&i?.unsubscribeOrderNotifications({state:e,profile:r});}),[i,r,e]),()=>i?.unsubscribeOrderNotifications({state:e,profile:r})};export{w as MoneriumContext,J as MoneriumProvider,d as keys,ve as useAddress,qe as useAddresses,l as useAuth,Ie as useBalances,ze as useIBAN,Ke as useIBANs,Be as useLinkAddress,Me as useMoveIban,Ce as useOrder,xe as useOrders,De as usePlaceOrder,Pe as useProfile,B as useProfiles,Re as useRequestIban,Ne as useSubmitProfileDetails,Fe as useSubscribeOrderNotification,Se as useTokens};//# sourceMappingURL=index.mjs.map
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9saWIvY29udGV4dC50c3giLCIuLi9zcmMvbGliL3Byb3ZpZGVyLnRzeCIsIi4uL3NyYy9saWIvaG9va3MudHN4Il0sIm5hbWVzIjpbIk1vbmVyaXVtQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJNb25lcml1bVByb3ZpZGVyIiwiY2hpbGRyZW4iLCJjbGllbnRJZCIsInJlZGlyZWN0VXJpIiwiZW52aXJvbm1lbnQiLCJyZWZyZXNoVG9rZW4iLCJvblJlZnJlc2hUb2tlblVwZGF0ZSIsImRlYnVnIiwicXVlcnlDbGllbnQiLCJ1c2VRdWVyeUNsaWVudCIsInNkayIsInVzZVN0YXRlIiwiTW9uZXJpdW1DbGllbnQiLCJpc0F1dGhvcml6ZWQiLCJzZXRJc0F1dGhvcml6ZWQiLCJlcnJvciIsInNldEVycm9yIiwibG9hZGluZ0F1dGgiLCJzZXRMb2FkaW5nQXV0aCIsInVzZUVmZmVjdCIsImF1dGhvcml6ZSIsInVzZUNhbGxiYWNrIiwicGFyYW1zIiwiZXJyIiwic2l3ZSIsInJldm9rZUFjY2VzcyIsImpzeCIsImtleXMiLCJwcm9maWxlIiwiYWRkcmVzcyIsImZpbHRlciIsImNoYWluIiwiY3VycmVuY2llcyIsImliYW4iLCJvcmRlcklkIiwidXNlU2RrIiwiY29udGV4dCIsInVzZUNvbnRleHQiLCJ1c2VBdXRoIiwidXNlUHJvZmlsZSIsInF1ZXJ5IiwiZGF0YSIsInVzZVByb2ZpbGVzIiwicHJvZmlsZVRvVXNlIiwidXNlUXVlcnkiLCJ1c2VUb2tlbnMiLCJ1c2VBZGRyZXNzIiwidXNlQWRkcmVzc2VzIiwicGFyc2VDaGFpbiIsInVzZUJhbGFuY2VzIiwidXNlSUJBTiIsInVzZUlCQU5zIiwidXNlT3JkZXIiLCJ1c2VPcmRlcnMiLCJmaWx0ZXJzIiwidXNlU3VibWl0UHJvZmlsZURldGFpbHMiLCJtdXRhdGlvbiIsIm11dGF0ZUFzeW5jIiwicmVzdCIsInVzZU11dGF0aW9uIiwiYm9keSIsInZhcmlhYmxlcyIsInZhcnMiLCJ1c2VSZXF1ZXN0SWJhbiIsImVtYWlsTm90aWZpY2F0aW9ucyIsInVzZU1vdmVJYmFuIiwidXNlUGxhY2VPcmRlciIsInN1cHBvcnRpbmdEb2N1bWVudCIsImRvY3VtZW50SWQiLCJuZXdCb2R5IiwidXNlTGlua0FkZHJlc3MiLCJ1c2VTdWJzY3JpYmVPcmRlck5vdGlmaWNhdGlvbiIsInN0YXRlIiwib25NZXNzYWdlIiwib25FcnJvciJdLCJtYXBwaW5ncyI6IjhPQUlPLElBQU1BLENBQWtCQyxDQUFBQSxhQUFBQSxDQUU3QixJQUFJLEVDa0JDLElBQU1DLEVBQW1CLENBQUMsQ0FDL0IsUUFBQUMsQ0FBQUEsQ0FBQUEsQ0FDQSxRQUFBQyxDQUFBQSxDQUFBQSxDQUNBLFdBQUFDLENBQUFBLENBQUFBLENBQ0EsV0FBQUMsQ0FBQUEsQ0FBQUEsQ0FBYyxTQUNkLENBQUEsWUFBQSxDQUFBQyxDQUNBLENBQUEsb0JBQUEsQ0FBQUMsQ0FDQSxDQUFBLEtBQUEsQ0FBQUMsQ0FBUSxDQUFBLEtBQ1YsQ0FVTSxHQUFBLENBQ0osSUFBTUMsQ0FBQUEsQ0FBY0MsY0FBZSxFQUFBLENBRTdCLENBQUNDLENBQUcsQ0FBSUMsQ0FBQUEsUUFBQUEsQ0FBUyxJQUVkLElBQUlDLGVBQWUsQ0FDeEIsV0FBQSxDQUFBUixDQUNBLENBQUEsUUFBQSxDQUFBRixDQUNBLENBQUEsV0FBQSxDQUFBQyxDQUNBLENBQUEsS0FBQSxDQUFPSSxDQUNULENBQUMsQ0FDRixDQUFBLENBRUssQ0FBQ00sQ0FBQUEsQ0FBY0MsQ0FBZSxDQUFBLENBQUlILFFBQWtCLENBQUEsS0FBSyxDQUN6RCxDQUFBLENBQUNJLENBQU9DLENBQUFBLENBQVEsQ0FBSUwsQ0FBQUEsUUFBQUEsQ0FBaUMsSUFBSSxDQUFBLENBQ3pELENBQUNNLENBQUFBLENBQWFDLENBQWMsQ0FBQSxDQUFJUCxTQUFTLElBQUksQ0FBQSxDQUVuRFEsU0FBVSxDQUFBLEtBQUEsQ0FDUSxTQUFZLENBQzFCLEdBQUlULENBQUFBLENBQ0YsR0FBSSxDQUNGSSxDQUFnQixDQUFBLE1BQU1KLENBQUks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Q0FBQUEsQ0FBQUEsQ0FBTyxPQUFTNUMsQ0FBQUEsQ0FBUSxDQUFDLEVBRXpFLENBQ0MsQ0FBQSxDQUFBLENBQUNsQixDQUFLa0IsQ0FBQUEsQ0FBQUEsQ0FBUzRDLENBQUssQ0FBQyxDQUVqQixDQUFBLElBQ0w5RCxDQUFLLEVBQUEsNkJBQUEsQ0FBOEIsQ0FBRSxLQUFBLENBQU84RCxDQUFPLENBQUEsT0FBQSxDQUFTNUMsQ0FBUSxDQUFDLENBQ3pFIiwiZmlsZSI6ImluZGV4Lm1qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IFNka0luc3RhbmNlLCBVc2VBdXRoUmV0dXJuIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBNb25lcml1bUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PFxuICAoVXNlQXV0aFJldHVybiAmIFNka0luc3RhbmNlKSB8IG51bGxcbj4obnVsbCk7XG4iLCJpbXBvcnQgeyBSZWFjdE5vZGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlUXVlcnlDbGllbnQgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuXG5pbXBvcnQge1xuICBBdXRoRmxvd09wdGlvbnMsXG4gIEF1dGhGbG93U0lXRU9wdGlvbnMsXG4gIE1vbmVyaXVtQ2xpZW50LFxufSBmcm9tICdAbW9uZXJpdW0vc2RrJztcblxuaW1wb3J0IHsgTW9uZXJpdW1Db250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcblxuLyoqXG4gKiBXcmFwIHlvdXIgYXBwbGljYXRpb24gd2l0aCB0aGUgTW9uZXJpdW0gcHJvdmlkZXIuXG4gKiBAZ3JvdXAgUHJvdmlkZXJcbiAqIEBwYXJhbSBwYXJhbXNcbiAqIEBwYXJhbSBwYXJhbXMuY2hpbGRyZW4gLSBSZXN0IG9mIHRoZSBhcHBsaWNhdGlvbi5cbiAqIEBwYXJhbSBwYXJhbXMuY2xpZW50SWQgLSBNb25lcml1bSBhdXRoIGZsb3cgY2xpZW50IGlkLlxuICogQHBhcmFtIHBhcmFtcy5yZWRpcmVjdFVyaSAtIE1vbmVyaXVtIGF1dGggZmxvdyByZWRpcmVjdCB1cmwuXG4gKiBAcGFyYW0gcGFyYW1zLmVudmlyb25tZW50IC0gTW9uZXJpdW0gZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0gcGFyYW1zLm9uUmVmcmVzaFRva2VuVXBkYXRlIC0gQ2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgcmVmcmVzaCB0b2tlbiBpcyB1cGRhdGVkLiBTdG9yZSBpdCBzZWN1cmVseS5cbiAqIEBwYXJhbSBwYXJhbXMucmVmcmVzaFRva2VuIC0gUHJvdmlkZSB0aGUgc2VjdXJlbHkgc3RvcmVkIHJlZnJlc2ggdG9rZW4gdG8gcmVjb25uZWN0LlxuICogQHBhcmFtIHBhcmFtcy5kZWJ1ZyAtIEVuYWJsZSBkZWJ1ZyBtb2RlLlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IE1vbmVyaXVtUHJvdmlkZXIgPSAoe1xuICBjaGlsZHJlbixcbiAgY2xpZW50SWQsXG4gIHJlZGlyZWN0VXJpLFxuICBlbnZpcm9ubWVudCA9ICdzYW5kYm94JyxcbiAgcmVmcmVzaFRva2VuLFxuICBvblJlZnJlc2hUb2tlblVwZGF0ZSxcbiAgZGVidWcgPSBmYWxzZSxcbn06IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xpZW50SWQ6IHN0cmluZztcbiAgcmVkaXJlY3RVcmk6IHN0cmluZztcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSByZWRpcmVjdFVyaSAqL1xuICByZWRpcmVjdFVybD86IHN0cmluZztcbiAgZW52aXJvbm1lbnQ/OiAnc2FuZGJveCcgfCAncHJvZHVjdGlvbic7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgb25SZWZyZXNoVG9rZW5VcGRhdGU/OiAodG9rZW46IHN0cmluZykgPT4gdm9pZDtcbiAgZGVidWc/OiBib29sZWFuO1xufSkgPT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgW3Nka10gPSB1c2VTdGF0ZSgoKSA9PiB7XG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgU0RLXG4gICAgcmV0dXJuIG5ldyBNb25lcml1bUNsaWVudCh7XG4gICAgICBlbnZpcm9ubWVudCxcbiAgICAgIGNsaWVudElkLFxuICAgICAgcmVkaXJlY3RVcmksXG4gICAgICBkZWJ1ZzogZGVidWcsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IFtpc0F1dGhvcml6ZWQsIHNldElzQXV0aG9yaXplZF0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8RXJyb3IgfCB1bmtub3duIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtsb2FkaW5nQXV0aCwgc2V0TG9hZGluZ0F1dGhdID0gdXNlU3RhdGUodHJ1ZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb25uZWN0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHNkaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHNldElzQXV0aG9yaXplZChhd2FpdCBzZGsuZ2V0QWNjZXNzKCkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgYWNjZXNzOicsIGVycm9yKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzZXRMb2FkaW5nQXV0aChmYWxzZSk7XG4gICAgICAgICAgaWYgKHNkaz8uYmVhcmVyUHJvZmlsZSkge1xuICAgICAgICAgICAgb25SZWZyZXNoVG9rZW5VcGRhdGU/LihzZGsuYmVhcmVyUHJvZmlsZS5yZWZyZXNoX3Rva2VuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29ubmVjdCgpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChzZGspIHtcbiAgICAgICAgc2RrLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCByZWNvbm5lY3QgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoc2RrKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc2V0SXNBdXRob3JpemVkKGF3YWl0IHNkay5nZXRBY2Nlc3MocmVmcmVzaFRva2VuKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGdldCBhY2Nlc3M6JywgZXJyb3IpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmIChzZGs/LmJlYXJlclByb2ZpbGUpIHtcbiAgICAgICAgICAgIG9uUmVmcmVzaFRva2VuVXBkYXRlPy4oc2RrLmJlYXJlclByb2ZpbGUucmVmcmVzaF90b2tlbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAocmVmcmVzaFRva2VuICYmICFpc0F1dGhvcml6ZWQgJiYgIWxvYWRpbmdBdXRoKSB7XG4gICAgICByZWNvbm5lY3QoKTtcbiAgICB9XG4gIH0sIFtyZWZyZXNoVG9rZW5dKTtcblxuICBjb25zdCBhdXRob3JpemUgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocGFyYW1zPzogQXV0aEZsb3dPcHRpb25zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoc2RrKSB7XG4gICAgICAgICAgYXdhaXQgc2RrLmF1dGhvcml6ZShwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIGF1dGhvcml6YXRpb246JywgZXJyKTtcbiAgICAgICAgc2V0RXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZGtdXG4gICk7XG5cbiAgY29uc3Qgc2l3ZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChwYXJhbXM6IEF1dGhGbG93U0lXRU9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChzZGspIHtcbiAgICAgICAgICBhd2FpdCBzZGsuc2l3ZShwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIHNpZ24gaW4gd2l0aCBldGhlcmV1bTonLCBlcnIpO1xuICAgICAgICBzZXRFcnJvcihlcnIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW3Nka11cbiAgKTtcblxuICBjb25zdCByZXZva2VBY2Nlc3MgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChzZGspIHtcbiAgICAgICAgYXdhaXQgc2RrLnJldm9rZUFjY2VzcygpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIHJldm9raW5nIGFjY2VzczonLCBlcnIpO1xuICAgICAgc2V0RXJyb3IoZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcXVlcnlDbGllbnQuY2xlYXIoKTtcbiAgICAgIHNldElzQXV0aG9yaXplZChmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPE1vbmVyaXVtQ29udGV4dC5Qcm92aWRlclxuICAgICAgdmFsdWU9e3tcbiAgICAgICAgc2RrLFxuICAgICAgICBhdXRob3JpemUsXG4gICAgICAgIHNpd2UsXG4gICAgICAgIGlzQXV0aG9yaXplZCxcbiAgICAgICAgaXNMb2FkaW5nOiBsb2FkaW5nQXV0aCxcbiAgICAgICAgZXJyb3IsXG4gICAgICAgIGRpc2Nvbm5lY3Q6IGFzeW5jICgpID0+IHNkaz8uZGlzY29ubmVjdCgpLFxuICAgICAgICByZXZva2VBY2Nlc3M6IGFzeW5jICgpID0+IHJldm9rZUFjY2VzcygpLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Nb25lcml1bUNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuIiwiaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTXV0YXRpb24sIHVzZVF1ZXJ5LCB1c2VRdWVyeUNsaWVudCB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5cbmltcG9ydCBNb25lcml1bUNsaWVudCwge1xuICBBZGRyZXNzLFxuICBBZGRyZXNzZXNSZXNwb25zZSxcbiAgQmFsYW5jZXMsXG4gIENoYWluLFxuICBDaGFpbklkLFxuICBDdXJyZW5jeSxcbiAgQ3VycmVuY3lDb2RlLFxuICBJQkFOLFxuICBJQkFOc1Jlc3BvbnNlLFxuICBMaW5rQWRkcmVzcyxcbiAgTGlua2VkQWRkcmVzcyxcbiAgTW92ZUliYW5QYXlsb2FkLFxuICBOZXdPcmRlcixcbiAgT3JkZXIsXG4gIE9yZGVyc1Jlc3BvbnNlLFxuICBPcmRlclN0YXRlLFxuICBwYXJzZUNoYWluLFxuICBQcm9maWxlLFxuICBQcm9maWxlUGVybWlzc2lvbnMsXG4gIFByb2ZpbGVzUmVzcG9uc2UsXG4gIFJlcXVlc3RJYmFuUGF5bG9hZCxcbiAgUmVzcG9uc2VTdGF0dXMsXG4gIFN1Ym1pdFByb2ZpbGVEZXRhaWxzUGF5bG9hZCxcbiAgVG9rZW4sXG59IGZyb20gJ0Btb25lcml1bS9zZGsnO1xuXG5pbXBvcnQgeyBNb25lcml1bUNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHtcbiAgTXV0YXRpb25PcHRpb25zLFxuICBNdXRhdGlvblJlc3VsdCxcbiAgUXVlcnlPcHRpb25zLFxuICBVc2VBdXRoUmV0dXJuLFxufSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIFF1ZXJ5IGtleXMgZm9yIFJlYWN0IHF1ZXJ5XG4gKiAqL1xuZXhwb3J0IGNvbnN0IGtleXMgPSB7XG4gIGdldEFsbDogWydtb25lcml1bSddLFxuICBnZXRQcm9maWxlOiAocHJvZmlsZTogc3RyaW5nKSA9PiBbXG4gICAgJ21vbmVyaXVtJyxcbiAgICAncHJvZmlsZScsXG4gICAgLi4uKHByb2ZpbGUgPyBbcHJvZmlsZV0gOiBbXSksXG4gIF0sXG4gIGdldFByb2ZpbGVzOiBbJ21vbmVyaXVtJywgJ3Byb2ZpbGVzJ10sXG4gIGdldEFkZHJlc3M6IChhZGRyZXNzOiBzdHJpbmcpID0+IFsnbW9uZXJpdW0nLCAnYWRkcmVzcycsIFthZGRyZXNzXV0sXG4gIGdldEFkZHJlc3NlczogKGZpbHRlcj86IHVua25vd24pID0+IFtcbiAgICAnbW9uZXJpdW0nLFxuICAgICdhZGRyZXNzZXMnLFxuICAgIC4uLihmaWx0ZXIgPyBbZmlsdGVyXSA6IFtdKSxcbiAgXSxcbiAgZ2V0QmFsYW5jZXM6IChcbiAgICBhZGRyZXNzOiBzdHJpbmcsXG4gICAgY2hhaW46IENoYWluLFxuICAgIGN1cnJlbmNpZXM/OiBDdXJyZW5jeUNvZGUgfCBDdXJyZW5jeUNvZGVbXVxuICApID0+IFtcbiAgICAnbW9uZXJpdW0nLFxuICAgICdiYWxhbmNlcycsXG4gICAgYWRkcmVzcyxcbiAgICBjaGFpbixcbiAgICAuLi4oY3VycmVuY2llcyA/IFsuLi5jdXJyZW5jaWVzXSA6IFtdKSxcbiAgXSxcbiAgZ2V0SWJhbjogKGliYW46IHN0cmluZykgPT4gWydtb25lcml1bScsICdpYmFuJywgaWJhbl0sXG4gIGdldEliYW5zOiAoZmlsdGVyPzogdW5rbm93bikgPT4gW1xuICAgICdtb25lcml1bScsXG4gICAgJ2liYW5zJyxcbiAgICAuLi4oZmlsdGVyID8gW2ZpbHRlcl0gOiBbXSksXG4gIF0sXG4gIGdldFRva2VuczogWydtb25lcml1bScsICd0b2tlbnMnXSxcbiAgZ2V0T3JkZXI6IChvcmRlcklkOiBzdHJpbmcpID0+IFsnbW9uZXJpdW0nLCAnb3JkZXInLCBvcmRlcklkXSxcbiAgZ2V0T3JkZXJzOiAoZmlsdGVyPzogdW5rbm93bikgPT4gW1xuICAgICdtb25lcml1bScsXG4gICAgJ29yZGVycycsXG4gICAgLi4uKGZpbHRlciA/IFtmaWx0ZXJdIDogW10pLFxuICBdLFxuICBzdWJtaXRQcm9maWxlRGV0YWlsczogWydtb25lcml1bScsICdzdWJtaXQtcHJvZmlsZS1kZXRhaWxzJ10sXG4gIG1vdmVJYmFuOiBbJ21vbmVyaXVtJywgJ21vdmUtaWJhbiddLFxuICByZXF1ZXN0SWJhbjogWydtb25lcml1bScsICdyZXF1ZXN0LWliYW4nXSxcbiAgcGxhY2VPcmRlcjogWydtb25lcml1bScsICdwbGFjZS1vcmRlciddLFxuICBsaW5rQWRkcmVzczogWydtb25lcml1bScsICdsaW5rLWFkZHJlc3MnXSxcbn07XG5cbi8qKiBJbnRlcm5hbCBob29rIHRvIHVzZSBTREsgKi9cbmZ1bmN0aW9uIHVzZVNkaygpOiBNb25lcml1bUNsaWVudCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KE1vbmVyaXVtQ29udGV4dCk7XG5cbiAgaWYgKGNvbnRleHQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZVNkayBtdXN0IGJlIHVzZWQgd2l0aGluIGEgTW9uZXJpdW1Qcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0Py5zZGs7XG59XG5cbi8qKlxuICogIyBSZWRpcmVjdCB0byB0aGUgTW9uZXJpdW0gYXV0aCBmbG93LlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgQXV0aGVudGljYXRpb25cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgeyBhdXRob3JpemUsIGlzQXV0aG9yaXplZCwgaXNMb2FkaW5nLCBlcnJvciB9ID0gdXNlQXV0aCgpO1xuICpcbiAqIGF1dGhvcml6ZSgpOyAvLyBSZWRpcmVjdHMgdG8gdGhlIE1vbmVyaXVtIGF1dGggZmxvdy5cbiAqXG4gKiAvLyBPcHQtaW4gdG8gYXV0b21hdGVkIHdhbGxldCBsaW5raW5nIHdpdGggdGhlc2UgcGFyYW1ldGVycy5cbiAqIGF1dGhvcml6ZSh7IGFkZHJlc3MsIHNpZ25hdHVyZSwgY2hhaW4gfSkuXG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJucyB7VXNlQXV0aFJldHVybn1cbiAqIC0gYGF1dGhvcml6ZWAgIC0gUmVkaXJlY3RzIHRvIHRoZSBNb25lcml1bSBhdXRoIGZsb3cuXG4gKiAtIGBzaXdlYCAgICAgICAtIFNpZ24gaW4gd2l0aCBFdGhlcmV1bS4gaHR0cHM6Ly9tb25lcml1bS5jb20vc2l3ZVxuICogLSBgaXNBdXRob3JpemVkYCAtIFdoZXRoZXIgdGhlIHVzZXIgaXMgYXV0aG9yaXplZC5cbiAqIC0gYGlzTG9hZGluZ2AgLSBXaGV0aGVyIHRoZSBhdXRoIGZsb3cgaXMgbG9hZGluZy5cbiAqIC0gYGVycm9yYCAtIEVycm9yIG1lc3NhZ2UgaWYgdGhlIGF1dGggZmxvdyBmYWlscy5cbiAqIC0gYGRpc2Nvbm5lY3RgIC0gRGlzY29ubmVjdCB0aGUgdXNlci5cbiAqIC0gYHJldm9rZUFjY2Vzc2AgLSBSZXZva2UgdGhlIHVzZXIncyBhY2Nlc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBdXRoKCk6IFVzZUF1dGhSZXR1cm4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChNb25lcml1bUNvbnRleHQpO1xuXG4gIGlmIChjb250ZXh0ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VBdXRoIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBNb25lcml1bVByb3ZpZGVyJyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGlzQXV0aG9yaXplZDogY29udGV4dC5pc0F1dGhvcml6ZWQsXG4gICAgYXV0aG9yaXplOiBjb250ZXh0LmF1dGhvcml6ZSxcbiAgICBzaXdlOiBjb250ZXh0LnNpd2UsXG4gICAgaXNMb2FkaW5nOiBjb250ZXh0LmlzTG9hZGluZyxcbiAgICBlcnJvcjogY29udGV4dC5lcnJvcixcbiAgICBkaXNjb25uZWN0OiBjb250ZXh0LmRpc2Nvbm5lY3QsXG4gICAgcmV2b2tlQWNjZXNzOiBjb250ZXh0LnJldm9rZUFjY2VzcyxcbiAgfTtcbn1cblxuLyoqXG4gKiBJZiBubyBgcHJvZmlsZWAgaWQgaXMgcHJvdmlkZWQsIHRoZSBkZWZhdWx0IHByb2ZpbGUgaXMgdXNlZC5cbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IFByb2ZpbGVzXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZVByb2ZpbGUoKTtcbiAqIGBgYFxuXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vcHJvZmlsZSB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUHJvZmlsZSh7XG4gIHByb2ZpbGUsXG4gIHF1ZXJ5LFxufToge1xuICAvKiogVGhlIGlkIG9mIHRoZSBwcm9maWxlICovXG4gIHByb2ZpbGU/OiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxQcm9maWxlPjtcbn0gPSB7fSkge1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcblxuICBjb25zdCB7IGRhdGEgfSA9IHVzZVByb2ZpbGVzKCk7XG5cbiAgY29uc3QgcHJvZmlsZVRvVXNlID0gcHJvZmlsZSB8fCAoZGF0YT8ucHJvZmlsZXM/LlswXT8uaWQgYXMgc3RyaW5nKTtcblxuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldFByb2ZpbGUocHJvZmlsZVRvVXNlKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgaWYgKCFwcm9maWxlVG9Vc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9maWxlIElkIGlzIHJlcXVpcmVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0UHJvZmlsZShwcm9maWxlVG9Vc2UpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihcbiAgICAgIHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgcHJvZmlsZVRvVXNlICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKVxuICAgICksXG4gIH0pO1xufVxuLyoqXG4gKiAjIEdldCBwcm9maWxlc1xuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgUHJvZmlsZXNcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGRhdGEsXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZVByb2ZpbGVzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9wcm9maWxlcyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUHJvZmlsZXMoe1xuICBxdWVyeSxcbn06IHtcbiAgLyoqIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9ICovXG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPFByb2ZpbGVzUmVzcG9uc2U+O1xufSA9IHt9KSB7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuXG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0UHJvZmlsZXMsXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZGsuZ2V0UHJvZmlsZXMoKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGRhdGEsXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZVRva2VucygpO1xuICogYGBgXG5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi90b2tlbnMgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVRva2Vucyh7XG4gIHF1ZXJ5LFxufToge1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8VG9rZW5bXT47XG59ID0ge30pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0VG9rZW5zLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmdldFRva2VucygpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xufVxuXG4vKipcbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IEFkZHJlc3Nlc1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBcblxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VBZGRyZXNzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzLXYyI3RhZy9hZGRyZXNzZXMvb3BlcmF0aW9uL2FkZHJlc3MgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUFkZHJlc3Moe1xuICBhZGRyZXNzLFxuICBxdWVyeSA9IHt9LFxufToge1xuICAvKiogRmV0Y2ggYSBzcGVjaWZpYyBhZGRyZXNzLiAqL1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxBZGRyZXNzPjtcbn0pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRBZGRyZXNzKGFkZHJlc3MpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghYWRkcmVzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FkZHJlc3MgaXMgcmVxdWlyZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5nZXRBZGRyZXNzKGFkZHJlc3MpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihcbiAgICAgIHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgYWRkcmVzcyAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSlcbiAgICApLFxuICB9KTtcbn1cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgQWRkcmVzc2VzXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLnByb2ZpbGVdIEZpbHRlciBiYXNlZCBvbiBwcm9maWxlIGlkLlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXMuY2hhaW5dIEZpbHRlciBiYXNlZCBvbiBjaGFpbiAtIENVUlJFTlRMWSBSRVRVUk5TIEFOIEVSUk9SLlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VBZGRyZXNzZXMoKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3MtdjIjdGFnL2FkZHJlc3Nlcy9vcGVyYXRpb24vYWRkcmVzc2VzIHwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBZGRyZXNzZXMoe1xuICBwcm9maWxlLFxuICBjaGFpbixcbiAgcXVlcnkgPSB7fSxcbn06IHtcbiAgcHJvZmlsZT86IHN0cmluZztcbiAgY2hhaW4/OiBDaGFpbiB8IENoYWluSWQ7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxBZGRyZXNzZXNSZXNwb25zZT47XG59ID0ge30pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG5cbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcblxuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEFkZHJlc3Nlcyh7XG4gICAgICBwcm9maWxlLFxuICAgICAgY2hhaW46IGNoYWluID8gcGFyc2VDaGFpbihjaGFpbikgOiB1bmRlZmluZWQsXG4gICAgfSksXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZGsuZ2V0QWRkcmVzc2VzKHsgcHJvZmlsZSwgY2hhaW4gfSk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG4vKipcbiAqICMgR2V0IGJhbGFuY2UgZm9yIGEgYW4gYWRkcmVzcyBvbiBhIGdpdmUgY2hhaW5cbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IEFkZHJlc3Nlc1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8QmFsYW5jZXM+fSBwYXJhbXMuYWRkcmVzcyBUaGUgYWRkcmVzcyB0byBmZXRjaCB0aGUgYmFsYW5jZSBmb3IuXG4gKiBAcGFyYW0ge1F1ZXJ5T3B0aW9uczxCYWxhbmNlcz59IHBhcmFtcy5jaGFpbiBUaGUgY2hhaW4gdG8gZmV0Y2ggdGhlIGJhbGFuY2UgZm9yLlxuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8QmFsYW5jZXM+fSBbcGFyYW1zLmN1cnJlbmNpZXNdIE9uZSBvciBtYW55OiBgZXVyYCwgYHVzZGAsIGBnYnBgLCBgaXNrYFxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VCYWxhbmNlcygpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy92MiN0YWcvYWRkcmVzc2VzL29wZXJhdGlvbi9iYWxhbmNlcyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUJhbGFuY2VzKHtcbiAgYWRkcmVzcyxcbiAgY2hhaW4sXG4gIGN1cnJlbmNpZXMsXG4gIHF1ZXJ5LFxufToge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNoYWluOiBDaGFpbiB8IENoYWluSWQ7XG4gIGN1cnJlbmNpZXM/OiBDdXJyZW5jeSB8IEN1cnJlbmN5W107XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxCYWxhbmNlcz47XG59KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuXG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0QmFsYW5jZXMoYWRkcmVzcywgcGFyc2VDaGFpbihjaGFpbiksIGN1cnJlbmNpZXMpLFxuICAgIHN0YWxlVGltZTogMTAwMCAqIDYwICogNSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNkay5nZXRCYWxhbmNlcyhhZGRyZXNzLCBjaGFpbiwgY3VycmVuY2llcyk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG5cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgSUJBTnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlSUJBTigpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy12MiN0YWcvaWJhbnMvb3BlcmF0aW9uL2liYW4gfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlCQU4oe1xuICBpYmFuLFxuICBxdWVyeSxcbn06IHtcbiAgLyoqIEZldGNoIGEgc3BlY2lmaWMgSUJBTiAqL1xuICBpYmFuOiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxJQkFOPjtcbn0pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRJYmFuKGliYW4pLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0SWJhbihpYmFuKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiBpYmFuICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xufVxuLyoqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBJQkFOc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGRhdGEsXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZUlCQU5zKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzLXYyI3RhZy9pYmFucy9vcGVyYXRpb24vaWJhbnMgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlCQU5zKHtcbiAgcHJvZmlsZSxcbiAgY2hhaW4sXG4gIHF1ZXJ5ID0ge30sXG59OiB7XG4gIC8qKiBGZXRjaCBJQkFOcyBmb3IgYSBzcGVjaWZpYyBwcm9maWxlLiAqL1xuICBwcm9maWxlPzogc3RyaW5nO1xuICAvKiogRmV0Y2ggSUJBTnMgZm9yIGEgc3BlY2lmaWMgY2hhaW4uICovXG4gIGNoYWluPzogQ2hhaW4gfCBDaGFpbklkO1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8SUJBTnNSZXNwb25zZT47XG59ID0ge30pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRJYmFucyh7IHByb2ZpbGUsIGNoYWluIH0pLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0SWJhbnMoeyBwcm9maWxlLCBjaGFpbiB9KTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBPcmRlcnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlT3JkZXIoKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL29yZGVyfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU9yZGVyKHtcbiAgb3JkZXJJZCxcbiAgcXVlcnkgPSB7fSxcbn06IHtcbiAgLyoqICBUaGUgaWQgb2YgdGhlIG9yZGVyLiAqL1xuICBvcmRlcklkOiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxPcmRlcj47XG59KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldE9yZGVyKG9yZGVySWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICBpZiAoIW9yZGVySWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPcmRlciBpZCBpcyByZXF1aXJlZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLmdldE9yZGVyKG9yZGVySWQpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIG9yZGVySWQgJiYgKHF1ZXJ5LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBPcmRlcnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXMuYWRkcmVzc10gRmlsdGVyIGJhc2VkIG9uIHRoZSBibG9ja2NoYWluIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLm1lbW9dIEZpbHRlciBieSB0aGUgcGF5bWVudCBtZW1vL3JlZmVyZW5jZS4uXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy5wcm9maWxlXSBGaWx0ZXIgYmFzZWQgb24gdGhlIHByb2ZpbGUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLnN0YXRlXSBGaWx0ZXIgYmFzZWQgb24gdGhlIHN0YXRlIG9mIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLnR4SGFzaF0gRmlsdGVyIGJhc2VkIG9uIHRoZSBibG9ja2NoYWluIHRyYW5zYWN0aW9uIGhhc2guXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VPcmRlcnMoKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL29yZGVycyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlT3JkZXJzKHtcbiAgcXVlcnkgPSB7fSxcbiAgLi4uZmlsdGVyc1xufToge1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8T3JkZXJzUmVzcG9uc2U+O1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICB0eEhhc2g/OiBzdHJpbmc7XG4gIHByb2ZpbGU/OiBzdHJpbmc7XG4gIG1lbW8/OiBzdHJpbmc7XG4gIHN0YXRlPzogT3JkZXJTdGF0ZTtcbn0gPSB7fSkge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRPcmRlcnMoZmlsdGVycyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5nZXRPcmRlcnMoZmlsdGVycyk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBTdWJtaXQgdGhlIHJlcXVpcmVkIGNvbXBsaWFuY2UgaW5mb3JtYXRpb24gdG8gb25ib2FyZCB0aGUgY3VzdG9tZXIuXG4gKlxuICogTm90ZSB0aGF0IHlvdSB3b24ndCBiZSBhYmxlIHRvIGNoYW5nZSB0aGUgcHJvZmlsZSBcImtpbmRcIiBmcm9tIHBlcnNvbmFsIHRvIGNvcnBvcmF0ZSBvciB2aWNlIHZlcnNhIG9uY2UgdGhlIHByb2ZpbGUgaGFzIGJlZW4gYXBwcm92ZWQuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBQcm9maWxlc1xuICogQHBhcmFtIHBhcmFtXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW0ucHJvZmlsZSBUaGUgaWQgb2YgdGhlIHByb2ZpbGUgdG8gc3VibWl0IHRvLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgc3VibWl0UHJvZmlsZURldGFpbHMsIC8vIHVzZU11dGF0aW9uJ3MgYG11dGF0ZUFzeW5jYCBwcm9wZXJ0eVxuICogICAgaXNQZW5kaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgc3RhdHVzLFxuICogICAgLi4ubW9yZVVzZU11dGF0aW9uUmVzdWx0c1xuICogfSA9IHVzZVN1Ym1pdFByb2ZpbGVEZXRhaWxzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzLXYyI3RhZy9wcm9maWxlcy9vcGVyYXRpb24vcHJvZmlsZS1kZXRhaWxzIHwgQVBJIERvY3VtZW50YXRpb259fVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTdWJtaXRQcm9maWxlRGV0YWlscyh7XG4gIHByb2ZpbGUsXG4gIG11dGF0aW9uID0ge30sXG59OiB7XG4gIHByb2ZpbGU6IHN0cmluZztcbiAgLyoqIHtAaW5oZXJpdERvYyBNdXRhdGlvbk9wdGlvbnN9ICovXG4gIG11dGF0aW9uPzogTXV0YXRpb25PcHRpb25zPFxuICAgIFJlc3BvbnNlU3RhdHVzLFxuICAgIEVycm9yLFxuICAgIFN1Ym1pdFByb2ZpbGVEZXRhaWxzUGF5bG9hZFxuICA+O1xufSk6IE11dGF0aW9uUmVzdWx0PFxuICAnc3VibWl0UHJvZmlsZURldGFpbHMnLFxuICBSZXNwb25zZVN0YXR1cyxcbiAgRXJyb3IsXG4gIFN1Ym1pdFByb2ZpbGVEZXRhaWxzUGF5bG9hZFxuPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgeyBtdXRhdGVBc3luYywgLi4ucmVzdCB9ID0gdXNlTXV0YXRpb24oe1xuICAgIC4uLm11dGF0aW9uLFxuICAgIG11dGF0aW9uS2V5OiBrZXlzLnN1Ym1pdFByb2ZpbGVEZXRhaWxzLFxuICAgIG11dGF0aW9uRm46IGFzeW5jIChib2R5OiBTdWJtaXRQcm9maWxlRGV0YWlsc1BheWxvYWQpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuc3VibWl0UHJvZmlsZURldGFpbHMocHJvZmlsZSwgYm9keSk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3MoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KSB7XG4gICAgICAvLyBSZWZldGNoIGFsbCBvcmRlcnMgb24gc3VjY2Vzcy5cbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgcXVlcnlLZXk6IGtleXMuZ2V0UHJvZmlsZShwcm9maWxlKSxcbiAgICAgIH0pO1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIHN1Y2Nlc3MuXG4gICAgICBtdXRhdGlvbj8ub25TdWNjZXNzPy4oZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KTtcbiAgICB9LFxuICAgIG9uRXJyb3IoZXJyb3IsIHZhcnMsIGNvbnRleHQpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBlcnJvci5cbiAgICAgIG11dGF0aW9uPy5vbkVycm9yPy4oZXJyb3IsIHZhcnMsIGNvbnRleHQpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgc3VibWl0UHJvZmlsZURldGFpbHM6IG11dGF0ZUFzeW5jLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG4vKipcbiAqIENyZWF0ZSBhbiBJQkFOIGZvciBhIHNwZWNpZmllZCBhZGRyZXNzIGFuZCBjaGFpbi5cbiAqIEFsbCBpbmNvbWluZyBFVVIgcGF5bWVudHMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHJvdXRlZCB0byB0aGUgbGlua2VkIGFkZHJlc3Mgb24gdGhhdCBjaGFpbi5cbiAqIEFueSBsaW5rZWQgYWRkcmVzcyBjYW4gdXNlIHRoaXMgSUJBTiBmb3Igb3V0Z29pbmcgcGF5bWVudHMuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBJQkFOc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICByZXF1ZXN0SWJhbiwgLy8gdXNlTXV0YXRpb24ncyBgbXV0YXRlQXN5bmNgIHByb3BlcnR5XG4gKiAgICBpc1BlbmRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICBzdGF0dXMsXG4gKiAgICAuLi5tb3JlVXNlTXV0YXRpb25SZXN1bHRzXG4gKiB9ID0gdXNlUmVxdWVzdEliYW4oKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3MtdjIjdGFnL2liYW5zL29wZXJhdGlvbi9yZXF1ZXN0LWliYW4gfCBBUEkgRG9jdW1lbnRhdGlvbn19XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlcXVlc3RJYmFuKHtcbiAgbXV0YXRpb24gPSB7fSxcbn06IHtcbiAgLyoqIHtAaW5oZXJpdERvYyBNdXRhdGlvbk9wdGlvbnN9ICovXG4gIG11dGF0aW9uPzogTXV0YXRpb25PcHRpb25zPFJlc3BvbnNlU3RhdHVzLCBFcnJvciwgUmVxdWVzdEliYW5QYXlsb2FkPjtcbn0gPSB7fSk6IE11dGF0aW9uUmVzdWx0PFxuICAncmVxdWVzdEliYW4nLFxuICBSZXNwb25zZVN0YXR1cyxcbiAgRXJyb3IsXG4gIFJlcXVlc3RJYmFuUGF5bG9hZFxuPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuXG4gIGNvbnN0IHsgbXV0YXRlQXN5bmMsIC4uLnJlc3QgfSA9IHVzZU11dGF0aW9uKHtcbiAgICAuLi5tdXRhdGlvbixcbiAgICBtdXRhdGlvbktleToga2V5cy5yZXF1ZXN0SWJhbixcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoe1xuICAgICAgYWRkcmVzcyxcbiAgICAgIGNoYWluLFxuICAgICAgZW1haWxOb3RpZmljYXRpb25zLFxuICAgIH06IFJlcXVlc3RJYmFuUGF5bG9hZCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5yZXF1ZXN0SWJhbih7IGFkZHJlc3MsIGNoYWluLCBlbWFpbE5vdGlmaWNhdGlvbnMgfSk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3MoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KSB7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gc3VjY2Vzcy5cbiAgICAgIG11dGF0aW9uPy5vblN1Y2Nlc3M/LihkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuICAgIH0sXG4gICAgb25FcnJvcihlcnJvciwgdmFycywgY29udGV4dCkge1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIGVycm9yLlxuICAgICAgbXV0YXRpb24/Lm9uRXJyb3I/LihlcnJvciwgdmFycywgY29udGV4dCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICByZXF1ZXN0SWJhbjogbXV0YXRlQXN5bmMsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cbi8qKlxuICogTW92ZSBhbiBleGlzdGluZyBJQkFOIHRvIGEgc3BlY2lmaWVkIGFkZHJlc3MgYW4gY2hhaW4uXG4gKiBBbGwgaW5jb21pbmcgRVVSIHBheW1lbnRzIHdpbGwgYXV0b21hdGljYWxseSBiZSByb3V0ZWQgdG8gdGhlIGFkZHJlc3Mgb24gdGhhdCBjaGFpbi5cbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IElCQU5zXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIG1vdmVJYmFuLCAvLyB1c2VNdXRhdGlvbidzIGBtdXRhdGVBc3luY2AgcHJvcGVydHlcbiAqICAgIGlzUGVuZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHN0YXR1cyxcbiAqICAgIC4uLm1vcmVVc2VNdXRhdGlvblJlc3VsdHNcbiAqIH0gPSB1c2VNb3ZlSWJhbigpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy92MiN0YWcvaWJhbnMvb3BlcmF0aW9uL21vdmUtaWJhbiB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VNb3ZlSWJhbih7XG4gIG11dGF0aW9uID0ge30sXG59OiB7XG4gIC8qKiB7QGluaGVyaXREb2MgTXV0YXRpb25PcHRpb25zfSAqL1xuICBtdXRhdGlvbj86IE11dGF0aW9uT3B0aW9uczxcbiAgICBSZXNwb25zZVN0YXR1cyxcbiAgICBFcnJvcixcbiAgICBNb3ZlSWJhblBheWxvYWQgJiB7IGliYW46IHN0cmluZyB9XG4gID47XG59ID0ge30pOiBNdXRhdGlvblJlc3VsdDxcbiAgJ21vdmVJYmFuJyxcbiAgUmVzcG9uc2VTdGF0dXMsXG4gIEVycm9yLFxuICBNb3ZlSWJhblBheWxvYWQgJiB7IGliYW46IHN0cmluZyB9XG4+IHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICBjb25zdCB7IG11dGF0ZUFzeW5jLCAuLi5yZXN0IH0gPSB1c2VNdXRhdGlvbih7XG4gICAgLi4ubXV0YXRpb24sXG4gICAgbXV0YXRpb25LZXk6IGtleXMubW92ZUliYW4sXG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHtcbiAgICAgIGliYW4sXG4gICAgICBhZGRyZXNzLFxuICAgICAgY2hhaW4sXG4gICAgfTogTW92ZUliYW5QYXlsb2FkICYgeyBpYmFuOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5tb3ZlSWJhbihpYmFuLCB7IGFkZHJlc3MsIGNoYWluIH0pO1xuICAgIH0sXG4gICAgb25TdWNjZXNzKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCkge1xuICAgICAgLy8gUmVmZXRjaCBhbGwgb3JkZXJzIG9uIHN1Y2Nlc3MuXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEliYW4odmFyaWFibGVzLmliYW4pLFxuICAgICAgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEliYW5zKCksXG4gICAgICB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgcXVlcnlLZXk6IGtleXMuZ2V0QWRkcmVzcyh2YXJpYWJsZXMuYWRkcmVzcyksXG4gICAgICB9KTtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBzdWNjZXNzLlxuICAgICAgbXV0YXRpb24/Lm9uU3VjY2Vzcz8uKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCk7XG4gICAgfSxcbiAgICBvbkVycm9yKGVycm9yLCB2YXJzLCBjb250ZXh0KSB7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gZXJyb3IuXG4gICAgICBtdXRhdGlvbj8ub25FcnJvcj8uKGVycm9yLCB2YXJzLCBjb250ZXh0KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0sXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIG1vdmVJYmFuOiBtdXRhdGVBc3luYyxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuLyoqXG4gKiBXaGVuIHRoZSBvcmRlciBoYXMgYmVlbiBwbGFjZWQsIHRoZSBvcmRlcnMgcXVlcnkgd2lsbCBiZSBpbnZhbGlkYXRlZCBhbmQgcmUtZmV0Y2hlZC5cbiAqXG4gKiBJZiB0aGUgb3JkZXIgYW1vdW50IGlzIGFib3ZlIDE1MDAwLCBhIHN1cHBvcnRpbmcgZG9jdW1lbnQgaXMgcmVxdWlyZWQuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBPcmRlcnNcbiAqIEBwYXJhbSBwYXJhbVxuICogQHBhcmFtIHtGaWxlfSBwYXJhbS5zdXBwb3J0aW5nRG9jdW1lbnQgU3VwcG9ydGluZyBkb2N1bWVudCBmaWxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgcGxhY2VPcmRlciwgLy8gdXNlTXV0YXRpb24ncyBgbXV0YXRlQXN5bmNgIHByb3BlcnR5XG4gKiAgICBpc1BlbmRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICBzdGF0dXMsXG4gKiAgICAuLi5tb3JlVXNlTXV0YXRpb25SZXN1bHRzXG4gKiB9ID0gdXNlUGxhY2VPcmRlcigpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vcG9zdC1vcmRlcnN8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VQbGFjZU9yZGVyKHtcbiAgc3VwcG9ydGluZ0RvY3VtZW50LFxuICBtdXRhdGlvbixcbn06IHtcbiAgc3VwcG9ydGluZ0RvY3VtZW50PzogRmlsZTtcbiAgLyoqIHtAaW5oZXJpdERvYyBNdXRhdGlvbk9wdGlvbnN9ICovXG4gIG11dGF0aW9uPzogTXV0YXRpb25PcHRpb25zPE9yZGVyLCBFcnJvciwgTmV3T3JkZXI+O1xufSA9IHt9KTogTXV0YXRpb25SZXN1bHQ8J3BsYWNlT3JkZXInLCBPcmRlciwgRXJyb3IsIE5ld09yZGVyPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgeyBtdXRhdGVBc3luYywgLi4ucmVzdCB9ID0gdXNlTXV0YXRpb24oe1xuICAgIC4uLm11dGF0aW9uLFxuICAgIG11dGF0aW9uS2V5OiBrZXlzLnBsYWNlT3JkZXIsXG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGJvZHk6IE5ld09yZGVyKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgbGV0IGRvY3VtZW50SWQ7XG4gICAgICBpZiAocGFyc2VJbnQoYm9keS5hbW91bnQpID4gMTUwMDApIHtcbiAgICAgICAgaWYgKCFzdXBwb3J0aW5nRG9jdW1lbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnU3VwcG9ydGluZyBkb2N1bWVudCBpcyByZXF1aXJlZCBmb3Igb3JkZXJzIGFib3ZlIDE1MDAwJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBsb2FkZWREb2N1bWVudCA9XG4gICAgICAgICAgYXdhaXQgc2RrLnVwbG9hZFN1cHBvcnRpbmdEb2N1bWVudChzdXBwb3J0aW5nRG9jdW1lbnQpO1xuICAgICAgICBkb2N1bWVudElkID0gdXBsb2FkZWREb2N1bWVudC5pZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3Qm9keSA9IHtcbiAgICAgICAgLi4uYm9keSxcbiAgICAgICAgZG9jdW1lbnRJZDogZG9jdW1lbnRJZCxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBzZGsucGxhY2VPcmRlcihuZXdCb2R5KTtcbiAgICB9LFxuICAgIG9uU3VjY2VzcyhkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpIHtcbiAgICAgIC8vIFJlZmV0Y2ggYWxsIG9yZGVycyBvbiBzdWNjZXNzLlxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICBxdWVyeUtleToga2V5cy5nZXRPcmRlcnMoKSxcbiAgICAgIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICBxdWVyeUtleToga2V5cy5nZXRCYWxhbmNlcyhkYXRhLmFkZHJlc3MsIGRhdGEuY2hhaW4pLFxuICAgICAgfSk7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gc3VjY2Vzcy5cbiAgICAgIG11dGF0aW9uPy5vblN1Y2Nlc3M/LihkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuICAgIH0sXG4gICAgb25FcnJvcihlcnJvciwgdmFycywgY29udGV4dCkge1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIGVycm9yLlxuICAgICAgbXV0YXRpb24/Lm9uRXJyb3I/LihlcnJvciwgdmFycywgY29udGV4dCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBwbGFjZU9yZGVyOiBtdXRhdGVBc3luYyxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuLyoqXG4gKiAjIEFkZCBhZGRyZXNzIHRvIHByb2ZpbGUuXG4gKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgUHJvZmlsZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgbGlua0FkZHJlc3MsIC8vIHVzZU11dGF0aW9uJ3MgYG11dGF0ZUFzeW5jYCBwcm9wZXJ0eVxuICogICAgaXNQZW5kaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgc3RhdHVzLFxuICogICAgLi4ubW9yZVVzZU11dGF0aW9uUmVzdWx0c1xuICogfSA9IHVzZUxpbmtBZGRyZXNzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9wcm9maWxlLWFkZHJlc3NlcyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VMaW5rQWRkcmVzcyh7XG4gIG11dGF0aW9uLFxufToge1xuICAvKioge0Bpbmhlcml0RG9jIE11dGF0aW9uT3B0aW9uc30gKi9cbiAgbXV0YXRpb24/OiBNdXRhdGlvbk9wdGlvbnM8TGlua2VkQWRkcmVzcywgRXJyb3IsIExpbmtBZGRyZXNzPjtcbn0gPSB7fSk6IE11dGF0aW9uUmVzdWx0PCdsaW5rQWRkcmVzcycsIExpbmtlZEFkZHJlc3MsIEVycm9yLCBMaW5rQWRkcmVzcz4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIGNvbnN0IHsgbXV0YXRlQXN5bmMsIC4uLnJlc3QgfSA9IHVzZU11dGF0aW9uKHtcbiAgICAuLi5tdXRhdGlvbixcbiAgICBtdXRhdGlvbktleToga2V5cy5saW5rQWRkcmVzcyxcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoYm9keTogTGlua0FkZHJlc3MpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmxpbmtBZGRyZXNzKGJvZHkpO1xuICAgIH0sXG4gICAgb25TdWNjZXNzKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCkge1xuICAgICAgLy8gUmVmZXRjaCBhbGwgb3JkZXJzIG9uIHN1Y2Nlc3MuXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEFkZHJlc3NlcygpLFxuICAgICAgfSk7XG4gICAgICBpZiAodmFyaWFibGVzLnByb2ZpbGUpIHtcbiAgICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldFByb2ZpbGUodmFyaWFibGVzLnByb2ZpbGUpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBzdWNjZXNzLlxuICAgICAgbXV0YXRpb24/Lm9uU3VjY2Vzcz8uKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCk7XG4gICAgfSxcbiAgICBvbkVycm9yKGVycm9yLCB2YXJzLCBjb250ZXh0KSB7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gZXJyb3IuXG4gICAgICBtdXRhdGlvbj8ub25FcnJvcj8uKGVycm9yLCB2YXJzLCBjb250ZXh0KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0sXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGxpbmtBZGRyZXNzOiBtdXRhdGVBc3luYyxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuXG4vKipcbiAqIEFQSSBjb25zdW1lcnMgaGF2ZSB0aGUgb3B0aW9uIHRvIHN1YnNjcmliZSB0byBhIFdlYlNvY2tldCBmb3IgcmVhbC10aW1lIG9yZGVyIG5vdGlmaWNhdGlvbnMuIFRoaXMgV2ViU29ja2V0IGNvbXBsaWVzIHdpdGggdGhlIHN0YW5kYXJkIFdlYlNvY2tldCBQcm90b2NvbCwgYWxsb3dpbmcgdGhlIHVzZSBvZiBzdGFuZGFyZCBXZWJTb2NrZXQgbGlicmFyaWVzIGZvciBzdWJzY3JpcHRpb24uXG4gKlxuICogVGhlIFdlYlNvY2tldCBlbWl0cyBhbiBldmVudCB3aGVuIGEgb3JkZXIgY2hhbmdlcyBzdGF0ZTpcbiAqXG4gKiBgcGxhY2VkYDogVGhlIG9yZGVyIGhhcyBiZWVuIGNyZWF0ZWQgYnV0IG5vdCB5ZXQgcHJvY2Vzc2VkLlxuICpcbiAqIGBwZW5kaW5nYDogVGhlIG9yZGVyIGlzIGF3YWl0aW5nIGZ1bGZpbGxtZW50IChlLmcuLCByZXZpZXcsIG1pbnRpbmcvYnVybmluZyB0b2tlbnMsIG9yIHNlbmRpbmcvcmVjZWl2aW5nIFNFUEEgcGF5bWVudCkuXG4gKlxuICogYHByb2Nlc3NlZGA6IFRoZSBvcmRlciBoYXMgYmVlbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICpcbiAqIGByZWplY3RlZGA6IFRoZSBvcmRlciB3YXMgcmVqZWN0ZWQsIHBvc3NpYmx5IGR1ZSB0byBjb21wbGlhbmNlIHJlYXNvbnMgb3IgaW5zdWZmaWNpZW50IGZ1bmRzLlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgT3JkZXJzXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKiBAcGFyYW0ge09yZGVyU3RhdGV9IFtwYXJhbXMuc3RhdGVdIEZpbHRlciBiYXNlZCBvbiB0aGUgc3RhdGUgb2YgdGhlIG9yZGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMucHJvZmlsZV0gRmlsdGVyIGJhc2VkIG9uIHRoZSBwcm9maWxlIGlkIG9mIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmFtcy5vbk1lc3NhZ2UgQ2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBvcmRlciBub3RpZmljYXRpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFyYW1zLm9uRXJyb3JdIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgZXJyb3Igbm90aWZpY2F0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgc3RhdGUsXG4gKiAgICBwcm9maWxlLFxuICogICAgb25NZXNzYWdlLFxuICogICAgb25FcnJvclxuICogfSA9IHVzZVN1YnNjcmliZU9yZGVyTm90aWZpY2F0aW9uKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzL3YxI29wZXJhdGlvbi9vcmRlcnMtbm90aWZpY2F0aW9uc3wgQVBJIERvY3VtZW50YXRpb259XG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFVuc3Vic2NyaWJlIGZyb20gb3JkZXIgbm90aWZpY2F0aW9ucy5cbiAqL1xuXG5leHBvcnQgY29uc3QgdXNlU3Vic2NyaWJlT3JkZXJOb3RpZmljYXRpb24gPSAoe1xuICBzdGF0ZSxcbiAgcHJvZmlsZSxcbiAgb25NZXNzYWdlLFxuICBvbkVycm9yLFxufToge1xuICBzdGF0ZT86IE9yZGVyU3RhdGU7XG4gIHByb2ZpbGU/OiBzdHJpbmc7XG4gIG9uTWVzc2FnZTogKG9yZGVyOiBPcmRlcikgPT4gdm9pZDtcbiAgb25FcnJvcj86ICgoZXJyOiBFdmVudCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG59KSA9PiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNkaykge1xuICAgICAgc2RrLnN1YnNjcmliZU9yZGVyTm90aWZpY2F0aW9ucyh7XG4gICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICBwcm9maWxlOiBwcm9maWxlLFxuICAgICAgICB9LFxuICAgICAgICBvbk1lc3NhZ2U6IG9uTWVzc2FnZSxcbiAgICAgICAgb25FcnJvcjogb25FcnJvcixcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgLyoqXG4gICAgICAgKiBOb3RlIHRoYXQgaW4gZGV2ZWxvcG1lbnQgbW9kZSwgUmVhY3QgU3RyaWN0IG1vZGUgd2lsbCBjYXVzZSB0aGlzXG4gICAgICAgKiBjbGVhbnVwIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB0d2ljZSBvbiBjbGllbnQgc2lkZSByb3V0ZSBjaGFuZ2VzLlxuICAgICAgICogU28gYSBzb2NrZXQgd2lsbCBiZSBpbW1lZGlhdGVseSBjbG9zZWQgYW5kIG9wZW5lZCBhZ2Fpbi5cbiAgICAgICAqIFRoaXMgaXMgbm90IGFuIGlzc3VlIGluIHByb2R1Y3Rpb24gbW9kZS5cbiAgICAgICAqL1xuICAgICAgaWYgKHNkaykge1xuICAgICAgICBzZGs/LnVuc3Vic2NyaWJlT3JkZXJOb3RpZmljYXRpb25zKHsgc3RhdGU6IHN0YXRlLCBwcm9maWxlOiBwcm9maWxlIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtzZGssIHByb2ZpbGUsIHN0YXRlXSk7XG5cbiAgcmV0dXJuICgpID0+XG4gICAgc2RrPy51bnN1YnNjcmliZU9yZGVyTm90aWZpY2F0aW9ucyh7IHN0YXRlOiBzdGF0ZSwgcHJvZmlsZTogcHJvZmlsZSB9KTtcbn07XG5cbi8qKiBFeHBvcnQgdHlwZXMgZm9yIGRvY3VtZW50YXRpb24gKi9cbmV4cG9ydCB0eXBlIHtcbiAgQWRkcmVzcyxcbiAgQmFsYW5jZXMsXG4gIElCQU4sXG4gIE1vdmVJYmFuUGF5bG9hZCxcbiAgTGlua0FkZHJlc3MsXG4gIFByb2ZpbGUsXG4gIFByb2ZpbGVQZXJtaXNzaW9ucyxcbiAgVG9rZW4sXG4gIFN1Ym1pdFByb2ZpbGVEZXRhaWxzUGF5bG9hZCxcbiAgTmV3T3JkZXIsXG4gIFJlc3BvbnNlU3RhdHVzLFxuICBPcmRlcixcbn07XG4iXX0=
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9saWIvY29udGV4dC50c3giLCIuLi9zcmMvbGliL3Byb3ZpZGVyLnRzeCIsIi4uL3NyYy9saWIvaG9va3MudHN4Il0sIm5hbWVzIjpbIk1vbmVyaXVtQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJNb25lcml1bVByb3ZpZGVyIiwiY2hpbGRyZW4iLCJjbGllbnRJZCIsInJlZGlyZWN0VXJpIiwiZW52aXJvbm1lbnQiLCJyZWZyZXNoVG9rZW4iLCJvblJlZnJlc2hUb2tlblVwZGF0ZSIsImRlYnVnIiwicXVlcnlDbGllbnQiLCJ1c2VRdWVyeUNsaWVudCIsInNkayIsInVzZVN0YXRlIiwiTW9uZXJpdW1DbGllbnQiLCJpc0F1dGhvcml6ZWQiLCJzZXRJc0F1dGhvcml6ZWQiLCJlcnJvciIsInNldEVycm9yIiwibG9hZGluZ0F1dGgiLCJzZXRMb2FkaW5nQXV0aCIsInVzZUVmZmVjdCIsImF1dGhvcml6ZSIsInVzZUNhbGxiYWNrIiwicGFyYW1zIiwiZXJyIiwic2l3ZSIsInJldm9rZUFjY2VzcyIsImpzeCIsImtleXMiLCJwcm9maWxlIiwiYWRkcmVzcyIsImZpbHRlciIsImNoYWluIiwiY3VycmVuY2llcyIsImliYW4iLCJvcmRlcklkIiwidXNlU2RrIiwiY29udGV4dCIsInVzZUNvbnRleHQiLCJ1c2VBdXRoIiwidXNlUHJvZmlsZSIsInF1ZXJ5IiwiZGF0YSIsInVzZVByb2ZpbGVzIiwicHJvZmlsZVRvVXNlIiwidXNlUXVlcnkiLCJ1c2VUb2tlbnMiLCJ1c2VBZGRyZXNzIiwidXNlQWRkcmVzc2VzIiwicGFyc2VDaGFpbiIsInVzZUJhbGFuY2VzIiwidXNlSUJBTiIsInVzZUlCQU5zIiwidXNlT3JkZXIiLCJ1c2VPcmRlcnMiLCJmaWx0ZXJzIiwidXNlU3VibWl0UHJvZmlsZURldGFpbHMiLCJtdXRhdGlvbiIsIm11dGF0ZUFzeW5jIiwicmVzdCIsInVzZU11dGF0aW9uIiwiYm9keSIsInZhcmlhYmxlcyIsInZhcnMiLCJ1c2VSZXF1ZXN0SWJhbiIsImVtYWlsTm90aWZpY2F0aW9ucyIsInVzZU1vdmVJYmFuIiwidXNlUGxhY2VPcmRlciIsInN1cHBvcnRpbmdEb2N1bWVudCIsImRvY3VtZW50SWQiLCJuZXdCb2R5IiwidXNlTGlua0FkZHJlc3MiLCJ1c2VTdWJzY3JpYmVPcmRlck5vdGlmaWNhdGlvbiIsInN0YXRlIiwib25NZXNzYWdlIiwib25FcnJvciJdLCJtYXBwaW5ncyI6IjhPQUlPLElBQU1BLENBQWtCQyxDQUFBQSxhQUFBQSxDQUU3QixJQUFJLEVDa0JDLElBQU1DLEVBQW1CLENBQUMsQ0FDL0IsUUFBQUMsQ0FBQUEsQ0FBQUEsQ0FDQSxRQUFBQyxDQUFBQSxDQUFBQSxDQUNBLFdBQUFDLENBQUFBLENBQUFBLENBQ0EsV0FBQUMsQ0FBQUEsQ0FBQUEsQ0FBYyxTQUNkLENBQUEsWUFBQSxDQUFBQyxDQUNBLENBQUEsb0JBQUEsQ0FBQUMsQ0FDQSxDQUFBLEtBQUEsQ0FBQUMsQ0FBUSxDQUFBLEtBQ1YsQ0FVTSxHQUFBLENBQ0osSUFBTUMsQ0FBQUEsQ0FBY0MsY0FBZSxFQUFBLENBRTdCLENBQUNDLENBQUcsQ0FBSUMsQ0FBQUEsUUFBQUEsQ0FBUyxJQUVkLElBQUlDLGVBQWUsQ0FDeEIsV0FBQSxDQUFBUixDQUNBLENBQUEsUUFBQSxDQUFBRixDQUNBLENBQUEsV0FBQSxDQUFBQyxDQUNBLENBQUEsS0FBQSxDQUFPSSxDQUNULENBQUMsQ0FDRixDQUFBLENBRUssQ0FBQ00sQ0FBQUEsQ0FBY0MsQ0FBZSxDQUFBLENBQUlILFFBQWtCLENBQUEsS0FBSyxDQUN6RCxDQUFBLENBQUNJLENBQU9DLENBQUFBLENBQVEsQ0FBSUwsQ0FBQUEsUUFBQUEsQ0FBaUMsSUFBSSxDQUFBLENBQ3pELENBQUNNLENBQUFBLENBQWFDLENBQWMsQ0FBQSxDQUFJUCxTQUFTLElBQUksQ0FBQSxDQUVuRFEsU0FBVSxDQUFBLEtBQUEsQ0FDUSxTQUFZLENBQzFCLEdBQUlULENBQUFBLENBQ0YsR0FBSSxDQUNGSSxDQUFnQixDQUFBLE1BQU1KLENBQUks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Q0FBQUEsQ0FBQUEsQ0FBTyxPQUFTNUMsQ0FBQUEsQ0FBUSxDQUFDLEVBRXpFLENBQ0MsQ0FBQSxDQUFBLENBQUNsQixDQUFLa0IsQ0FBQUEsQ0FBQUEsQ0FBUzRDLENBQUssQ0FBQyxDQUVqQixDQUFBLElBQ0w5RCxDQUFLLEVBQUEsNkJBQUEsQ0FBOEIsQ0FBRSxLQUFBLENBQU84RCxDQUFPLENBQUEsT0FBQSxDQUFTNUMsQ0FBUSxDQUFDLENBQ3pFIiwiZmlsZSI6ImluZGV4Lm1qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IFNka0luc3RhbmNlLCBVc2VBdXRoUmV0dXJuIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBNb25lcml1bUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PFxuICAoVXNlQXV0aFJldHVybiAmIFNka0luc3RhbmNlKSB8IG51bGxcbj4obnVsbCk7XG4iLCJpbXBvcnQgeyBSZWFjdE5vZGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlUXVlcnlDbGllbnQgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuXG5pbXBvcnQge1xuICBBdXRoRmxvd09wdGlvbnMsXG4gIEF1dGhGbG93U0lXRU9wdGlvbnMsXG4gIE1vbmVyaXVtQ2xpZW50LFxufSBmcm9tICdAbW9uZXJpdW0vc2RrJztcblxuaW1wb3J0IHsgTW9uZXJpdW1Db250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcblxuLyoqXG4gKiBXcmFwIHlvdXIgYXBwbGljYXRpb24gd2l0aCB0aGUgTW9uZXJpdW0gcHJvdmlkZXIuXG4gKiBAZ3JvdXAgUHJvdmlkZXJcbiAqIEBwYXJhbSBwYXJhbXNcbiAqIEBwYXJhbSBwYXJhbXMuY2hpbGRyZW4gLSBSZXN0IG9mIHRoZSBhcHBsaWNhdGlvbi5cbiAqIEBwYXJhbSBwYXJhbXMuY2xpZW50SWQgLSBNb25lcml1bSBhdXRoIGZsb3cgY2xpZW50IGlkLlxuICogQHBhcmFtIHBhcmFtcy5yZWRpcmVjdFVyaSAtIE1vbmVyaXVtIGF1dGggZmxvdyByZWRpcmVjdCB1cmwuXG4gKiBAcGFyYW0gcGFyYW1zLmVudmlyb25tZW50IC0gTW9uZXJpdW0gZW52aXJvbm1lbnQuXG4gKiBAcGFyYW0gcGFyYW1zLm9uUmVmcmVzaFRva2VuVXBkYXRlIC0gQ2FsbGJhY2sgdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgcmVmcmVzaCB0b2tlbiBpcyB1cGRhdGVkLiBTdG9yZSBpdCBzZWN1cmVseS5cbiAqIEBwYXJhbSBwYXJhbXMucmVmcmVzaFRva2VuIC0gUHJvdmlkZSB0aGUgc2VjdXJlbHkgc3RvcmVkIHJlZnJlc2ggdG9rZW4gdG8gcmVjb25uZWN0LlxuICogQHBhcmFtIHBhcmFtcy5kZWJ1ZyAtIEVuYWJsZSBkZWJ1ZyBtb2RlLlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IE1vbmVyaXVtUHJvdmlkZXIgPSAoe1xuICBjaGlsZHJlbixcbiAgY2xpZW50SWQsXG4gIHJlZGlyZWN0VXJpLFxuICBlbnZpcm9ubWVudCA9ICdzYW5kYm94JyxcbiAgcmVmcmVzaFRva2VuLFxuICBvblJlZnJlc2hUb2tlblVwZGF0ZSxcbiAgZGVidWcgPSBmYWxzZSxcbn06IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xpZW50SWQ6IHN0cmluZztcbiAgcmVkaXJlY3RVcmk6IHN0cmluZztcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSByZWRpcmVjdFVyaSAqL1xuICByZWRpcmVjdFVybD86IHN0cmluZztcbiAgZW52aXJvbm1lbnQ/OiAnc2FuZGJveCcgfCAncHJvZHVjdGlvbic7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgb25SZWZyZXNoVG9rZW5VcGRhdGU/OiAodG9rZW46IHN0cmluZykgPT4gdm9pZDtcbiAgZGVidWc/OiBib29sZWFuO1xufSkgPT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgW3Nka10gPSB1c2VTdGF0ZSgoKSA9PiB7XG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgU0RLXG4gICAgcmV0dXJuIG5ldyBNb25lcml1bUNsaWVudCh7XG4gICAgICBlbnZpcm9ubWVudCxcbiAgICAgIGNsaWVudElkLFxuICAgICAgcmVkaXJlY3RVcmksXG4gICAgICBkZWJ1ZzogZGVidWcsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IFtpc0F1dGhvcml6ZWQsIHNldElzQXV0aG9yaXplZF0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8RXJyb3IgfCB1bmtub3duIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtsb2FkaW5nQXV0aCwgc2V0TG9hZGluZ0F1dGhdID0gdXNlU3RhdGUodHJ1ZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb25uZWN0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHNkaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHNldElzQXV0aG9yaXplZChhd2FpdCBzZGsuZ2V0QWNjZXNzKCkpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgYWNjZXNzOicsIGVycm9yKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzZXRMb2FkaW5nQXV0aChmYWxzZSk7XG4gICAgICAgICAgaWYgKHNkaz8uYmVhcmVyUHJvZmlsZSkge1xuICAgICAgICAgICAgb25SZWZyZXNoVG9rZW5VcGRhdGU/LihzZGsuYmVhcmVyUHJvZmlsZS5yZWZyZXNoX3Rva2VuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29ubmVjdCgpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChzZGspIHtcbiAgICAgICAgc2RrLmRpc2Nvbm5lY3QoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCByZWNvbm5lY3QgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoc2RrKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc2V0SXNBdXRob3JpemVkKGF3YWl0IHNkay5nZXRBY2Nlc3MocmVmcmVzaFRva2VuKSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGdldCBhY2Nlc3M6JywgZXJyb3IpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmIChzZGs/LmJlYXJlclByb2ZpbGUpIHtcbiAgICAgICAgICAgIG9uUmVmcmVzaFRva2VuVXBkYXRlPy4oc2RrLmJlYXJlclByb2ZpbGUucmVmcmVzaF90b2tlbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAocmVmcmVzaFRva2VuICYmICFpc0F1dGhvcml6ZWQgJiYgIWxvYWRpbmdBdXRoKSB7XG4gICAgICByZWNvbm5lY3QoKTtcbiAgICB9XG4gIH0sIFtyZWZyZXNoVG9rZW5dKTtcblxuICBjb25zdCBhdXRob3JpemUgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocGFyYW1zPzogQXV0aEZsb3dPcHRpb25zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoc2RrKSB7XG4gICAgICAgICAgYXdhaXQgc2RrLmF1dGhvcml6ZShwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIGF1dGhvcml6YXRpb246JywgZXJyKTtcbiAgICAgICAgc2V0RXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZGtdXG4gICk7XG5cbiAgY29uc3Qgc2l3ZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChwYXJhbXM6IEF1dGhGbG93U0lXRU9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChzZGspIHtcbiAgICAgICAgICBhd2FpdCBzZGsuc2l3ZShwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIHNpZ24gaW4gd2l0aCBldGhlcmV1bTonLCBlcnIpO1xuICAgICAgICBzZXRFcnJvcihlcnIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW3Nka11cbiAgKTtcblxuICBjb25zdCByZXZva2VBY2Nlc3MgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChzZGspIHtcbiAgICAgICAgYXdhaXQgc2RrLnJldm9rZUFjY2VzcygpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIHJldm9raW5nIGFjY2VzczonLCBlcnIpO1xuICAgICAgc2V0RXJyb3IoZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcXVlcnlDbGllbnQuY2xlYXIoKTtcbiAgICAgIHNldElzQXV0aG9yaXplZChmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPE1vbmVyaXVtQ29udGV4dC5Qcm92aWRlclxuICAgICAgdmFsdWU9e3tcbiAgICAgICAgc2RrLFxuICAgICAgICBhdXRob3JpemUsXG4gICAgICAgIHNpd2UsXG4gICAgICAgIGlzQXV0aG9yaXplZCxcbiAgICAgICAgaXNMb2FkaW5nOiBsb2FkaW5nQXV0aCxcbiAgICAgICAgZXJyb3IsXG4gICAgICAgIGRpc2Nvbm5lY3Q6IGFzeW5jICgpID0+IHNkaz8uZGlzY29ubmVjdCgpLFxuICAgICAgICByZXZva2VBY2Nlc3M6IGFzeW5jICgpID0+IHJldm9rZUFjY2VzcygpLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Nb25lcml1bUNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuIiwiaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTXV0YXRpb24sIHVzZVF1ZXJ5LCB1c2VRdWVyeUNsaWVudCB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5cbmltcG9ydCBNb25lcml1bUNsaWVudCwge1xuICBBZGRyZXNzLFxuICBBZGRyZXNzZXNSZXNwb25zZSxcbiAgQmFsYW5jZXMsXG4gIENoYWluLFxuICBDaGFpbklkLFxuICBDdXJyZW5jeSxcbiAgQ3VycmVuY3lDb2RlLFxuICBJQkFOLFxuICBJQkFOc1Jlc3BvbnNlLFxuICBMaW5rQWRkcmVzcyxcbiAgTGlua2VkQWRkcmVzcyxcbiAgTW92ZUliYW5QYXlsb2FkLFxuICBOZXdPcmRlcixcbiAgT3JkZXIsXG4gIE9yZGVyc1Jlc3BvbnNlLFxuICBPcmRlclN0YXRlLFxuICBwYXJzZUNoYWluLFxuICBQcm9maWxlLFxuICBQcm9maWxlUGVybWlzc2lvbnMsXG4gIFByb2ZpbGVzUmVzcG9uc2UsXG4gIFJlcXVlc3RJYmFuUGF5bG9hZCxcbiAgUmVzcG9uc2VTdGF0dXMsXG4gIFN1Ym1pdFByb2ZpbGVEZXRhaWxzUGF5bG9hZCxcbiAgVG9rZW4sXG59IGZyb20gJ0Btb25lcml1bS9zZGsnO1xuXG5pbXBvcnQgeyBNb25lcml1bUNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHtcbiAgTXV0YXRpb25PcHRpb25zLFxuICBNdXRhdGlvblJlc3VsdCxcbiAgUXVlcnlPcHRpb25zLFxuICBVc2VBdXRoUmV0dXJuLFxufSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIFF1ZXJ5IGtleXMgZm9yIFJlYWN0IHF1ZXJ5XG4gKiAqL1xuZXhwb3J0IGNvbnN0IGtleXMgPSB7XG4gIGdldEFsbDogWydtb25lcml1bSddLFxuICBnZXRQcm9maWxlOiAocHJvZmlsZTogc3RyaW5nKSA9PiBbXG4gICAgJ21vbmVyaXVtJyxcbiAgICAncHJvZmlsZScsXG4gICAgLi4uKHByb2ZpbGUgPyBbcHJvZmlsZV0gOiBbXSksXG4gIF0sXG4gIGdldFByb2ZpbGVzOiBbJ21vbmVyaXVtJywgJ3Byb2ZpbGVzJ10sXG4gIGdldEFkZHJlc3M6IChhZGRyZXNzOiBzdHJpbmcpID0+IFsnbW9uZXJpdW0nLCAnYWRkcmVzcycsIFthZGRyZXNzXV0sXG4gIGdldEFkZHJlc3NlczogKGZpbHRlcj86IHVua25vd24pID0+IFtcbiAgICAnbW9uZXJpdW0nLFxuICAgICdhZGRyZXNzZXMnLFxuICAgIC4uLihmaWx0ZXIgPyBbZmlsdGVyXSA6IFtdKSxcbiAgXSxcbiAgZ2V0QmFsYW5jZXM6IChcbiAgICBhZGRyZXNzOiBzdHJpbmcsXG4gICAgY2hhaW46IENoYWluLFxuICAgIGN1cnJlbmNpZXM/OiBDdXJyZW5jeUNvZGUgfCBDdXJyZW5jeUNvZGVbXVxuICApID0+IFtcbiAgICAnbW9uZXJpdW0nLFxuICAgICdiYWxhbmNlcycsXG4gICAgYWRkcmVzcyxcbiAgICBjaGFpbixcbiAgICAuLi4oY3VycmVuY2llcyA/IFsuLi5jdXJyZW5jaWVzXSA6IFtdKSxcbiAgXSxcbiAgZ2V0SWJhbjogKGliYW46IHN0cmluZykgPT4gWydtb25lcml1bScsICdpYmFuJywgaWJhbl0sXG4gIGdldEliYW5zOiAoZmlsdGVyPzogdW5rbm93bikgPT4gW1xuICAgICdtb25lcml1bScsXG4gICAgJ2liYW5zJyxcbiAgICAuLi4oZmlsdGVyID8gW2ZpbHRlcl0gOiBbXSksXG4gIF0sXG4gIGdldFRva2VuczogWydtb25lcml1bScsICd0b2tlbnMnXSxcbiAgZ2V0T3JkZXI6IChvcmRlcklkOiBzdHJpbmcpID0+IFsnbW9uZXJpdW0nLCAnb3JkZXInLCBvcmRlcklkXSxcbiAgZ2V0T3JkZXJzOiAoZmlsdGVyPzogdW5rbm93bikgPT4gW1xuICAgICdtb25lcml1bScsXG4gICAgJ29yZGVycycsXG4gICAgLi4uKGZpbHRlciA/IFtmaWx0ZXJdIDogW10pLFxuICBdLFxuICBzdWJtaXRQcm9maWxlRGV0YWlsczogWydtb25lcml1bScsICdzdWJtaXQtcHJvZmlsZS1kZXRhaWxzJ10sXG4gIG1vdmVJYmFuOiBbJ21vbmVyaXVtJywgJ21vdmUtaWJhbiddLFxuICByZXF1ZXN0SWJhbjogWydtb25lcml1bScsICdyZXF1ZXN0LWliYW4nXSxcbiAgcGxhY2VPcmRlcjogWydtb25lcml1bScsICdwbGFjZS1vcmRlciddLFxuICBsaW5rQWRkcmVzczogWydtb25lcml1bScsICdsaW5rLWFkZHJlc3MnXSxcbn07XG5cbi8qKiBJbnRlcm5hbCBob29rIHRvIHVzZSBTREsgKi9cbmZ1bmN0aW9uIHVzZVNkaygpOiBNb25lcml1bUNsaWVudCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KE1vbmVyaXVtQ29udGV4dCk7XG5cbiAgaWYgKGNvbnRleHQgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZVNkayBtdXN0IGJlIHVzZWQgd2l0aGluIGEgTW9uZXJpdW1Qcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0Py5zZGs7XG59XG5cbi8qKlxuICogIyBSZWRpcmVjdCB0byB0aGUgTW9uZXJpdW0gYXV0aCBmbG93LlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgQXV0aGVudGljYXRpb25cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgeyBhdXRob3JpemUsIGlzQXV0aG9yaXplZCwgaXNMb2FkaW5nLCBlcnJvciB9ID0gdXNlQXV0aCgpO1xuICpcbiAqIGF1dGhvcml6ZSgpOyAvLyBSZWRpcmVjdHMgdG8gdGhlIE1vbmVyaXVtIGF1dGggZmxvdy5cbiAqXG4gKiAvLyBPcHQtaW4gdG8gYXV0b21hdGVkIHdhbGxldCBsaW5raW5nIHdpdGggdGhlc2UgcGFyYW1ldGVycy5cbiAqIGF1dGhvcml6ZSh7IGFkZHJlc3MsIHNpZ25hdHVyZSwgY2hhaW4gfSkuXG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJucyB7VXNlQXV0aFJldHVybn1cbiAqIC0gYGF1dGhvcml6ZWAgIC0gUmVkaXJlY3RzIHRvIHRoZSBNb25lcml1bSBhdXRoIGZsb3cuXG4gKiAtIGBzaXdlYCAgICAgICAtIFNpZ24gaW4gd2l0aCBFdGhlcmV1bS4gaHR0cHM6Ly9tb25lcml1bS5jb20vc2l3ZVxuICogLSBgaXNBdXRob3JpemVkYCAtIFdoZXRoZXIgdGhlIHVzZXIgaXMgYXV0aG9yaXplZC5cbiAqIC0gYGlzTG9hZGluZ2AgLSBXaGV0aGVyIHRoZSBhdXRoIGZsb3cgaXMgbG9hZGluZy5cbiAqIC0gYGVycm9yYCAtIEVycm9yIG1lc3NhZ2UgaWYgdGhlIGF1dGggZmxvdyBmYWlscy5cbiAqIC0gYGRpc2Nvbm5lY3RgIC0gRGlzY29ubmVjdCB0aGUgdXNlci5cbiAqIC0gYHJldm9rZUFjY2Vzc2AgLSBSZXZva2UgdGhlIHVzZXIncyBhY2Nlc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBdXRoKCk6IFVzZUF1dGhSZXR1cm4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChNb25lcml1bUNvbnRleHQpO1xuXG4gIGlmIChjb250ZXh0ID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VBdXRoIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBNb25lcml1bVByb3ZpZGVyJyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGlzQXV0aG9yaXplZDogY29udGV4dC5pc0F1dGhvcml6ZWQsXG4gICAgYXV0aG9yaXplOiBjb250ZXh0LmF1dGhvcml6ZSxcbiAgICBzaXdlOiBjb250ZXh0LnNpd2UsXG4gICAgaXNMb2FkaW5nOiBjb250ZXh0LmlzTG9hZGluZyxcbiAgICBlcnJvcjogY29udGV4dC5lcnJvcixcbiAgICBkaXNjb25uZWN0OiBjb250ZXh0LmRpc2Nvbm5lY3QsXG4gICAgcmV2b2tlQWNjZXNzOiBjb250ZXh0LnJldm9rZUFjY2VzcyxcbiAgfTtcbn1cblxuLyoqXG4gKiBJZiBubyBgcHJvZmlsZWAgaWQgaXMgcHJvdmlkZWQsIHRoZSBkZWZhdWx0IHByb2ZpbGUgaXMgdXNlZC5cbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IFByb2ZpbGVzXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZVByb2ZpbGUoKTtcbiAqIGBgYFxuXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vcHJvZmlsZSB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUHJvZmlsZSh7XG4gIHByb2ZpbGUsXG4gIHF1ZXJ5LFxufToge1xuICAvKiogVGhlIGlkIG9mIHRoZSBwcm9maWxlICovXG4gIHByb2ZpbGU/OiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxQcm9maWxlPjtcbn0gPSB7fSkge1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcblxuICBjb25zdCB7IGRhdGEgfSA9IHVzZVByb2ZpbGVzKCk7XG5cbiAgY29uc3QgcHJvZmlsZVRvVXNlID0gcHJvZmlsZSB8fCAoZGF0YT8ucHJvZmlsZXM/LlswXT8uaWQgYXMgc3RyaW5nKTtcblxuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldFByb2ZpbGUocHJvZmlsZVRvVXNlKSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgaWYgKCFwcm9maWxlVG9Vc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9maWxlIElkIGlzIHJlcXVpcmVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0UHJvZmlsZShwcm9maWxlVG9Vc2UpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihcbiAgICAgIHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgcHJvZmlsZVRvVXNlICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKVxuICAgICksXG4gIH0pO1xufVxuLyoqXG4gKiAjIEdldCBwcm9maWxlc1xuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgUHJvZmlsZXNcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGRhdGEsXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZVByb2ZpbGVzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9wcm9maWxlcyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUHJvZmlsZXMoe1xuICBxdWVyeSxcbn06IHtcbiAgLyoqIHtAaW5oZXJpdERvYyBRdWVyeU9wdGlvbnN9ICovXG4gIHF1ZXJ5PzogUXVlcnlPcHRpb25zPFByb2ZpbGVzUmVzcG9uc2U+O1xufSA9IHt9KSB7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuXG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0UHJvZmlsZXMsXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZGsuZ2V0UHJvZmlsZXMoKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGRhdGEsXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZVRva2VucygpO1xuICogYGBgXG5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi90b2tlbnMgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVRva2Vucyh7XG4gIHF1ZXJ5LFxufToge1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8VG9rZW5bXT47XG59ID0ge30pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0VG9rZW5zLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmdldFRva2VucygpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xufVxuXG4vKipcbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IEFkZHJlc3Nlc1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyBcblxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VBZGRyZXNzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzLXYyI3RhZy9hZGRyZXNzZXMvb3BlcmF0aW9uL2FkZHJlc3MgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUFkZHJlc3Moe1xuICBhZGRyZXNzLFxuICBxdWVyeSA9IHt9LFxufToge1xuICAvKiogRmV0Y2ggYSBzcGVjaWZpYyBhZGRyZXNzLiAqL1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxBZGRyZXNzPjtcbn0pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRBZGRyZXNzKGFkZHJlc3MpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghYWRkcmVzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FkZHJlc3MgaXMgcmVxdWlyZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5nZXRBZGRyZXNzKGFkZHJlc3MpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihcbiAgICAgIHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgYWRkcmVzcyAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSlcbiAgICApLFxuICB9KTtcbn1cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgQWRkcmVzc2VzXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLnByb2ZpbGVdIEZpbHRlciBiYXNlZCBvbiBwcm9maWxlIGlkLlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXMuY2hhaW5dIEZpbHRlciBiYXNlZCBvbiBjaGFpbiAtIENVUlJFTlRMWSBSRVRVUk5TIEFOIEVSUk9SLlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VBZGRyZXNzZXMoKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3MtdjIjdGFnL2FkZHJlc3Nlcy9vcGVyYXRpb24vYWRkcmVzc2VzIHwgQVBJIERvY3VtZW50YXRpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBZGRyZXNzZXMoe1xuICBwcm9maWxlLFxuICBjaGFpbixcbiAgcXVlcnkgPSB7fSxcbn06IHtcbiAgcHJvZmlsZT86IHN0cmluZztcbiAgY2hhaW4/OiBDaGFpbiB8IENoYWluSWQ7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxBZGRyZXNzZXNSZXNwb25zZT47XG59ID0ge30pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG5cbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcblxuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEFkZHJlc3Nlcyh7XG4gICAgICBwcm9maWxlLFxuICAgICAgY2hhaW46IGNoYWluID8gcGFyc2VDaGFpbihjaGFpbikgOiB1bmRlZmluZWQsXG4gICAgfSksXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZGsuZ2V0QWRkcmVzc2VzKHsgcHJvZmlsZSwgY2hhaW4gfSk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG4vKipcbiAqICMgR2V0IGJhbGFuY2UgZm9yIGEgYW4gYWRkcmVzcyBvbiBhIGdpdmUgY2hhaW5cbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IEFkZHJlc3Nlc1xuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtc1xuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8QmFsYW5jZXM+fSBwYXJhbXMuYWRkcmVzcyBUaGUgYWRkcmVzcyB0byBmZXRjaCB0aGUgYmFsYW5jZSBmb3IuXG4gKiBAcGFyYW0ge1F1ZXJ5T3B0aW9uczxCYWxhbmNlcz59IHBhcmFtcy5jaGFpbiBUaGUgY2hhaW4gdG8gZmV0Y2ggdGhlIGJhbGFuY2UgZm9yLlxuICogQHBhcmFtIHtRdWVyeU9wdGlvbnM8QmFsYW5jZXM+fSBbcGFyYW1zLmN1cnJlbmNpZXNdIE9uZSBvciBtYW55OiBgZXVyYCwgYHVzZGAsIGBnYnBgLCBgaXNrYFxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VCYWxhbmNlcygpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy92MiN0YWcvYWRkcmVzc2VzL29wZXJhdGlvbi9iYWxhbmNlcyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUJhbGFuY2VzKHtcbiAgYWRkcmVzcyxcbiAgY2hhaW4sXG4gIGN1cnJlbmNpZXMsXG4gIHF1ZXJ5LFxufToge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNoYWluOiBDaGFpbiB8IENoYWluSWQ7XG4gIGN1cnJlbmNpZXM/OiBDdXJyZW5jeSB8IEN1cnJlbmN5W107XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxCYWxhbmNlcz47XG59KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuXG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgLi4ucXVlcnksXG4gICAgcXVlcnlLZXk6IGtleXMuZ2V0QmFsYW5jZXMoYWRkcmVzcywgcGFyc2VDaGFpbihjaGFpbiksIGN1cnJlbmNpZXMpLFxuICAgIHN0YWxlVGltZTogMTAwMCAqIDYwICogNSxcbiAgICBxdWVyeUZuOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNkay5nZXRCYWxhbmNlcyhhZGRyZXNzLCBjaGFpbiwgY3VycmVuY2llcyk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5Py5lbmFibGVkID8/IHRydWUpKSxcbiAgfSk7XG59XG5cbi8qKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgSUJBTnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlSUJBTigpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy12MiN0YWcvaWJhbnMvb3BlcmF0aW9uL2liYW4gfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlCQU4oe1xuICBpYmFuLFxuICBxdWVyeSxcbn06IHtcbiAgLyoqIEZldGNoIGEgc3BlY2lmaWMgSUJBTiAqL1xuICBpYmFuOiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxJQkFOPjtcbn0pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRJYmFuKGliYW4pLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0SWJhbihpYmFuKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiBpYmFuICYmIChxdWVyeT8uZW5hYmxlZCA/PyB0cnVlKSksXG4gIH0pO1xufVxuLyoqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBJQkFOc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIGRhdGEsXG4gKiAgICBpc0xvYWRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICByZWZldGNoLFxuICogICAgLi4ubW9yZVVzZVF1ZXJ5UmVzdWx0c1xuICogfSA9IHVzZUlCQU5zKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzLXYyI3RhZy9pYmFucy9vcGVyYXRpb24vaWJhbnMgfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUlCQU5zKHtcbiAgcHJvZmlsZSxcbiAgY2hhaW4sXG4gIHF1ZXJ5ID0ge30sXG59OiB7XG4gIC8qKiBGZXRjaCBJQkFOcyBmb3IgYSBzcGVjaWZpYyBwcm9maWxlLiAqL1xuICBwcm9maWxlPzogc3RyaW5nO1xuICAvKiogRmV0Y2ggSUJBTnMgZm9yIGEgc3BlY2lmaWMgY2hhaW4uICovXG4gIGNoYWluPzogQ2hhaW4gfCBDaGFpbklkO1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8SUJBTnNSZXNwb25zZT47XG59ID0ge30pIHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG5cbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRJYmFucyh7IHByb2ZpbGUsIGNoYWluIH0pLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuZ2V0SWJhbnMoeyBwcm9maWxlLCBjaGFpbiB9KTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IEJvb2xlYW4oc2RrICYmIGlzQXV0aG9yaXplZCAmJiAocXVlcnk/LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBPcmRlcnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXNcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgZGF0YSxcbiAqICAgIGlzTG9hZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHJlZmV0Y2gsXG4gKiAgICAuLi5tb3JlVXNlUXVlcnlSZXN1bHRzXG4gKiB9ID0gdXNlT3JkZXIoKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL29yZGVyfCBBUEkgRG9jdW1lbnRhdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU9yZGVyKHtcbiAgb3JkZXJJZCxcbiAgcXVlcnkgPSB7fSxcbn06IHtcbiAgLyoqICBUaGUgaWQgb2YgdGhlIG9yZGVyLiAqL1xuICBvcmRlcklkOiBzdHJpbmc7XG4gIC8qKiB7QGluaGVyaXREb2MgUXVlcnlPcHRpb25zfSAqL1xuICBxdWVyeT86IFF1ZXJ5T3B0aW9uczxPcmRlcj47XG59KSB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIC4uLnF1ZXJ5LFxuICAgIHF1ZXJ5S2V5OiBrZXlzLmdldE9yZGVyKG9yZGVySWQpLFxuICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICBpZiAoIW9yZGVySWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPcmRlciBpZCBpcyByZXF1aXJlZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2RrLmdldE9yZGVyKG9yZGVySWQpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogQm9vbGVhbihzZGsgJiYgaXNBdXRob3JpemVkICYmIG9yZGVySWQgJiYgKHF1ZXJ5LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBPcmRlcnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXMuYWRkcmVzc10gRmlsdGVyIGJhc2VkIG9uIHRoZSBibG9ja2NoYWluIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLm1lbW9dIEZpbHRlciBieSB0aGUgcGF5bWVudCBtZW1vL3JlZmVyZW5jZS4uXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtcy5wcm9maWxlXSBGaWx0ZXIgYmFzZWQgb24gdGhlIHByb2ZpbGUgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLnN0YXRlXSBGaWx0ZXIgYmFzZWQgb24gdGhlIHN0YXRlIG9mIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zLnR4SGFzaF0gRmlsdGVyIGJhc2VkIG9uIHRoZSBibG9ja2NoYWluIHRyYW5zYWN0aW9uIGhhc2guXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICBkYXRhLFxuICogICAgaXNMb2FkaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgcmVmZXRjaCxcbiAqICAgIC4uLm1vcmVVc2VRdWVyeVJlc3VsdHNcbiAqIH0gPSB1c2VPcmRlcnMoKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3Mjb3BlcmF0aW9uL29yZGVycyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlT3JkZXJzKHtcbiAgcXVlcnkgPSB7fSxcbiAgLi4uZmlsdGVyc1xufToge1xuICAvKioge0Bpbmhlcml0RG9jIFF1ZXJ5T3B0aW9uc30gKi9cbiAgcXVlcnk/OiBRdWVyeU9wdGlvbnM8T3JkZXJzUmVzcG9uc2U+O1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICB0eEhhc2g/OiBzdHJpbmc7XG4gIHByb2ZpbGU/OiBzdHJpbmc7XG4gIG1lbW8/OiBzdHJpbmc7XG4gIHN0YXRlPzogT3JkZXJTdGF0ZTtcbn0gPSB7fSkge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgcmV0dXJuIHVzZVF1ZXJ5KHtcbiAgICAuLi5xdWVyeSxcbiAgICBxdWVyeUtleToga2V5cy5nZXRPcmRlcnMoZmlsdGVycyksXG4gICAgcXVlcnlGbjogYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5nZXRPcmRlcnMoZmlsdGVycyk7XG4gICAgfSxcbiAgICBlbmFibGVkOiBCb29sZWFuKHNkayAmJiBpc0F1dGhvcml6ZWQgJiYgKHF1ZXJ5LmVuYWJsZWQgPz8gdHJ1ZSkpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBTdWJtaXQgdGhlIHJlcXVpcmVkIGNvbXBsaWFuY2UgaW5mb3JtYXRpb24gdG8gb25ib2FyZCB0aGUgY3VzdG9tZXIuXG4gKlxuICogTm90ZSB0aGF0IHlvdSB3b24ndCBiZSBhYmxlIHRvIGNoYW5nZSB0aGUgcHJvZmlsZSBcImtpbmRcIiBmcm9tIHBlcnNvbmFsIHRvIGNvcnBvcmF0ZSBvciB2aWNlIHZlcnNhIG9uY2UgdGhlIHByb2ZpbGUgaGFzIGJlZW4gYXBwcm92ZWQuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBQcm9maWxlc1xuICogQHBhcmFtIHBhcmFtXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyYW0ucHJvZmlsZSBUaGUgaWQgb2YgdGhlIHByb2ZpbGUgdG8gc3VibWl0IHRvLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgc3VibWl0UHJvZmlsZURldGFpbHMsIC8vIHVzZU11dGF0aW9uJ3MgYG11dGF0ZUFzeW5jYCBwcm9wZXJ0eVxuICogICAgaXNQZW5kaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgc3RhdHVzLFxuICogICAgLi4ubW9yZVVzZU11dGF0aW9uUmVzdWx0c1xuICogfSA9IHVzZVN1Ym1pdFByb2ZpbGVEZXRhaWxzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzLXYyI3RhZy9wcm9maWxlcy9vcGVyYXRpb24vcHJvZmlsZS1kZXRhaWxzIHwgQVBJIERvY3VtZW50YXRpb259fVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTdWJtaXRQcm9maWxlRGV0YWlscyh7XG4gIHByb2ZpbGUsXG4gIG11dGF0aW9uID0ge30sXG59OiB7XG4gIHByb2ZpbGU6IHN0cmluZztcbiAgLyoqIHtAaW5oZXJpdERvYyBNdXRhdGlvbk9wdGlvbnN9ICovXG4gIG11dGF0aW9uPzogTXV0YXRpb25PcHRpb25zPFxuICAgIFJlc3BvbnNlU3RhdHVzLFxuICAgIEVycm9yLFxuICAgIFN1Ym1pdFByb2ZpbGVEZXRhaWxzUGF5bG9hZFxuICA+O1xufSk6IE11dGF0aW9uUmVzdWx0PFxuICAnc3VibWl0UHJvZmlsZURldGFpbHMnLFxuICBSZXNwb25zZVN0YXR1cyxcbiAgRXJyb3IsXG4gIFN1Ym1pdFByb2ZpbGVEZXRhaWxzUGF5bG9hZFxuPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgeyBtdXRhdGVBc3luYywgLi4ucmVzdCB9ID0gdXNlTXV0YXRpb24oe1xuICAgIC4uLm11dGF0aW9uLFxuICAgIG11dGF0aW9uS2V5OiBrZXlzLnN1Ym1pdFByb2ZpbGVEZXRhaWxzLFxuICAgIG11dGF0aW9uRm46IGFzeW5jIChib2R5OiBTdWJtaXRQcm9maWxlRGV0YWlsc1BheWxvYWQpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZGsuc3VibWl0UHJvZmlsZURldGFpbHMocHJvZmlsZSwgYm9keSk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3MoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KSB7XG4gICAgICAvLyBSZWZldGNoIGFsbCBvcmRlcnMgb24gc3VjY2Vzcy5cbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgcXVlcnlLZXk6IGtleXMuZ2V0UHJvZmlsZShwcm9maWxlKSxcbiAgICAgIH0pO1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIHN1Y2Nlc3MuXG4gICAgICBtdXRhdGlvbj8ub25TdWNjZXNzPy4oZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KTtcbiAgICB9LFxuICAgIG9uRXJyb3IoZXJyb3IsIHZhcnMsIGNvbnRleHQpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBlcnJvci5cbiAgICAgIG11dGF0aW9uPy5vbkVycm9yPy4oZXJyb3IsIHZhcnMsIGNvbnRleHQpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgc3VibWl0UHJvZmlsZURldGFpbHM6IG11dGF0ZUFzeW5jLFxuICAgIC4uLnJlc3QsXG4gIH07XG59XG4vKipcbiAqIENyZWF0ZSBhbiBJQkFOIGZvciBhIHNwZWNpZmllZCBhZGRyZXNzIGFuZCBjaGFpbi5cbiAqIEFsbCBpbmNvbWluZyBFVVIgcGF5bWVudHMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHJvdXRlZCB0byB0aGUgbGlua2VkIGFkZHJlc3Mgb24gdGhhdCBjaGFpbi5cbiAqIEFueSBsaW5rZWQgYWRkcmVzcyBjYW4gdXNlIHRoaXMgSUJBTiBmb3Igb3V0Z29pbmcgcGF5bWVudHMuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBJQkFOc1xuICogQHBhcmFtIHtPYmplY3R9IFtwYXJhbXNdIE5vIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjb25zdCB7XG4gKiAgICByZXF1ZXN0SWJhbiwgLy8gdXNlTXV0YXRpb24ncyBgbXV0YXRlQXN5bmNgIHByb3BlcnR5XG4gKiAgICBpc1BlbmRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICBzdGF0dXMsXG4gKiAgICAuLi5tb3JlVXNlTXV0YXRpb25SZXN1bHRzXG4gKiB9ID0gdXNlUmVxdWVzdEliYW4oKTtcbiAqIGBgYFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25lcml1bS5kZXYvYXBpLWRvY3MtdjIjdGFnL2liYW5zL29wZXJhdGlvbi9yZXF1ZXN0LWliYW4gfCBBUEkgRG9jdW1lbnRhdGlvbn19XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlcXVlc3RJYmFuKHtcbiAgbXV0YXRpb24gPSB7fSxcbn06IHtcbiAgLyoqIHtAaW5oZXJpdERvYyBNdXRhdGlvbk9wdGlvbnN9ICovXG4gIG11dGF0aW9uPzogTXV0YXRpb25PcHRpb25zPFJlc3BvbnNlU3RhdHVzLCBFcnJvciwgUmVxdWVzdEliYW5QYXlsb2FkPjtcbn0gPSB7fSk6IE11dGF0aW9uUmVzdWx0PFxuICAncmVxdWVzdEliYW4nLFxuICBSZXNwb25zZVN0YXR1cyxcbiAgRXJyb3IsXG4gIFJlcXVlc3RJYmFuUGF5bG9hZFxuPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuXG4gIGNvbnN0IHsgbXV0YXRlQXN5bmMsIC4uLnJlc3QgfSA9IHVzZU11dGF0aW9uKHtcbiAgICAuLi5tdXRhdGlvbixcbiAgICBtdXRhdGlvbktleToga2V5cy5yZXF1ZXN0SWJhbixcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoe1xuICAgICAgYWRkcmVzcyxcbiAgICAgIGNoYWluLFxuICAgICAgZW1haWxOb3RpZmljYXRpb25zLFxuICAgIH06IFJlcXVlc3RJYmFuUGF5bG9hZCkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5yZXF1ZXN0SWJhbih7IGFkZHJlc3MsIGNoYWluLCBlbWFpbE5vdGlmaWNhdGlvbnMgfSk7XG4gICAgfSxcbiAgICBvblN1Y2Nlc3MoZGF0YSwgdmFyaWFibGVzLCBjb250ZXh0KSB7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gc3VjY2Vzcy5cbiAgICAgIG11dGF0aW9uPy5vblN1Y2Nlc3M/LihkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuICAgIH0sXG4gICAgb25FcnJvcihlcnJvciwgdmFycywgY29udGV4dCkge1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIGVycm9yLlxuICAgICAgbXV0YXRpb24/Lm9uRXJyb3I/LihlcnJvciwgdmFycywgY29udGV4dCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICByZXF1ZXN0SWJhbjogbXV0YXRlQXN5bmMsXG4gICAgLi4ucmVzdCxcbiAgfTtcbn1cbi8qKlxuICogTW92ZSBhbiBleGlzdGluZyBJQkFOIHRvIGEgc3BlY2lmaWVkIGFkZHJlc3MgYW4gY2hhaW4uXG4gKiBBbGwgaW5jb21pbmcgRVVSIHBheW1lbnRzIHdpbGwgYXV0b21hdGljYWxseSBiZSByb3V0ZWQgdG8gdGhlIGFkZHJlc3Mgb24gdGhhdCBjaGFpbi5cbiAqIEBncm91cCBIb29rc1xuICogQGNhdGVnb3J5IElCQU5zXG4gKiBAcGFyYW0ge09iamVjdH0gW3BhcmFtc10gTm8gcmVxdWlyZWQgcGFyYW1ldGVycy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHtcbiAqICAgIG1vdmVJYmFuLCAvLyB1c2VNdXRhdGlvbidzIGBtdXRhdGVBc3luY2AgcHJvcGVydHlcbiAqICAgIGlzUGVuZGluZyxcbiAqICAgIGlzRXJyb3IsXG4gKiAgICBlcnJvcixcbiAqICAgIHN0YXR1cyxcbiAqICAgIC4uLm1vcmVVc2VNdXRhdGlvblJlc3VsdHNcbiAqIH0gPSB1c2VNb3ZlSWJhbigpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcy92MiN0YWcvaWJhbnMvb3BlcmF0aW9uL21vdmUtaWJhbiB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VNb3ZlSWJhbih7XG4gIG11dGF0aW9uID0ge30sXG59OiB7XG4gIC8qKiB7QGluaGVyaXREb2MgTXV0YXRpb25PcHRpb25zfSAqL1xuICBtdXRhdGlvbj86IE11dGF0aW9uT3B0aW9uczxcbiAgICBSZXNwb25zZVN0YXR1cyxcbiAgICBFcnJvcixcbiAgICBNb3ZlSWJhblBheWxvYWQgJiB7IGliYW46IHN0cmluZyB9XG4gID47XG59ID0ge30pOiBNdXRhdGlvblJlc3VsdDxcbiAgJ21vdmVJYmFuJyxcbiAgUmVzcG9uc2VTdGF0dXMsXG4gIEVycm9yLFxuICBNb3ZlSWJhblBheWxvYWQgJiB7IGliYW46IHN0cmluZyB9XG4+IHtcbiAgY29uc3Qgc2RrID0gdXNlU2RrKCk7XG4gIGNvbnN0IHsgaXNBdXRob3JpemVkIH0gPSB1c2VBdXRoKCk7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICBjb25zdCB7IG11dGF0ZUFzeW5jLCAuLi5yZXN0IH0gPSB1c2VNdXRhdGlvbih7XG4gICAgLi4ubXV0YXRpb24sXG4gICAgbXV0YXRpb25LZXk6IGtleXMubW92ZUliYW4sXG4gICAgbXV0YXRpb25GbjogYXN5bmMgKHtcbiAgICAgIGliYW4sXG4gICAgICBhZGRyZXNzLFxuICAgICAgY2hhaW4sXG4gICAgfTogTW92ZUliYW5QYXlsb2FkICYgeyBpYmFuOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgaWYgKCFzZGspIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBTREsgaW5zdGFuY2UgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZXIgbm90IGF1dGhvcml6ZWQnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNkay5tb3ZlSWJhbihpYmFuLCB7IGFkZHJlc3MsIGNoYWluIH0pO1xuICAgIH0sXG4gICAgb25TdWNjZXNzKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCkge1xuICAgICAgLy8gUmVmZXRjaCBhbGwgb3JkZXJzIG9uIHN1Y2Nlc3MuXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEliYW4odmFyaWFibGVzLmliYW4pLFxuICAgICAgfSk7XG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEliYW5zKCksXG4gICAgICB9KTtcbiAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgcXVlcnlLZXk6IGtleXMuZ2V0QWRkcmVzcyh2YXJpYWJsZXMuYWRkcmVzcyksXG4gICAgICB9KTtcbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBzdWNjZXNzLlxuICAgICAgbXV0YXRpb24/Lm9uU3VjY2Vzcz8uKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCk7XG4gICAgfSxcbiAgICBvbkVycm9yKGVycm9yLCB2YXJzLCBjb250ZXh0KSB7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gZXJyb3IuXG4gICAgICBtdXRhdGlvbj8ub25FcnJvcj8uKGVycm9yLCB2YXJzLCBjb250ZXh0KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0sXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIG1vdmVJYmFuOiBtdXRhdGVBc3luYyxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuLyoqXG4gKiBXaGVuIHRoZSBvcmRlciBoYXMgYmVlbiBwbGFjZWQsIHRoZSBvcmRlcnMgcXVlcnkgd2lsbCBiZSBpbnZhbGlkYXRlZCBhbmQgcmUtZmV0Y2hlZC5cbiAqXG4gKiBJZiB0aGUgb3JkZXIgYW1vdW50IGlzIGFib3ZlIDE1MDAwLCBhIHN1cHBvcnRpbmcgZG9jdW1lbnQgaXMgcmVxdWlyZWQuXG4gKiBAZ3JvdXAgSG9va3NcbiAqIEBjYXRlZ29yeSBPcmRlcnNcbiAqIEBwYXJhbSBwYXJhbVxuICogQHBhcmFtIHtGaWxlfSBwYXJhbS5zdXBwb3J0aW5nRG9jdW1lbnQgU3VwcG9ydGluZyBkb2N1bWVudCBmaWxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgcGxhY2VPcmRlciwgLy8gdXNlTXV0YXRpb24ncyBgbXV0YXRlQXN5bmNgIHByb3BlcnR5XG4gKiAgICBpc1BlbmRpbmcsXG4gKiAgICBpc0Vycm9yLFxuICogICAgZXJyb3IsXG4gKiAgICBzdGF0dXMsXG4gKiAgICAuLi5tb3JlVXNlTXV0YXRpb25SZXN1bHRzXG4gKiB9ID0gdXNlUGxhY2VPcmRlcigpO1xuICogYGBgXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vbmVyaXVtLmRldi9hcGktZG9jcyNvcGVyYXRpb24vcG9zdC1vcmRlcnN8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VQbGFjZU9yZGVyKHtcbiAgc3VwcG9ydGluZ0RvY3VtZW50LFxuICBtdXRhdGlvbixcbn06IHtcbiAgc3VwcG9ydGluZ0RvY3VtZW50PzogRmlsZTtcbiAgLyoqIHtAaW5oZXJpdERvYyBNdXRhdGlvbk9wdGlvbnN9ICovXG4gIG11dGF0aW9uPzogTXV0YXRpb25PcHRpb25zPE9yZGVyLCBFcnJvciwgTmV3T3JkZXI+O1xufSA9IHt9KTogTXV0YXRpb25SZXN1bHQ8J3BsYWNlT3JkZXInLCBPcmRlciwgRXJyb3IsIE5ld09yZGVyPiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuICBjb25zdCB7IGlzQXV0aG9yaXplZCB9ID0gdXNlQXV0aCgpO1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgeyBtdXRhdGVBc3luYywgLi4ucmVzdCB9ID0gdXNlTXV0YXRpb24oe1xuICAgIC4uLm11dGF0aW9uLFxuICAgIG11dGF0aW9uS2V5OiBrZXlzLnBsYWNlT3JkZXIsXG4gICAgbXV0YXRpb25GbjogYXN5bmMgKGJvZHk6IE5ld09yZGVyKSA9PiB7XG4gICAgICBpZiAoIXNkaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFNESyBpbnN0YW5jZSBhdmFpbGFibGUnKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVXNlciBub3QgYXV0aG9yaXplZCcpO1xuICAgICAgfVxuICAgICAgbGV0IGRvY3VtZW50SWQ7XG4gICAgICBpZiAocGFyc2VJbnQoYm9keS5hbW91bnQpID4gMTUwMDApIHtcbiAgICAgICAgaWYgKCFzdXBwb3J0aW5nRG9jdW1lbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnU3VwcG9ydGluZyBkb2N1bWVudCBpcyByZXF1aXJlZCBmb3Igb3JkZXJzIGFib3ZlIDE1MDAwJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBsb2FkZWREb2N1bWVudCA9XG4gICAgICAgICAgYXdhaXQgc2RrLnVwbG9hZFN1cHBvcnRpbmdEb2N1bWVudChzdXBwb3J0aW5nRG9jdW1lbnQpO1xuICAgICAgICBkb2N1bWVudElkID0gdXBsb2FkZWREb2N1bWVudC5pZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3Qm9keSA9IHtcbiAgICAgICAgLi4uYm9keSxcbiAgICAgICAgZG9jdW1lbnRJZDogZG9jdW1lbnRJZCxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBzZGsucGxhY2VPcmRlcihuZXdCb2R5KTtcbiAgICB9LFxuICAgIG9uU3VjY2VzcyhkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpIHtcbiAgICAgIC8vIFJlZmV0Y2ggYWxsIG9yZGVycyBvbiBzdWNjZXNzLlxuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICBxdWVyeUtleToga2V5cy5nZXRPcmRlcnMoKSxcbiAgICAgIH0pO1xuICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICBxdWVyeUtleToga2V5cy5nZXRCYWxhbmNlcyhkYXRhLmFkZHJlc3MsIGRhdGEuY2hhaW4pLFxuICAgICAgfSk7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gc3VjY2Vzcy5cbiAgICAgIG11dGF0aW9uPy5vblN1Y2Nlc3M/LihkYXRhLCB2YXJpYWJsZXMsIGNvbnRleHQpO1xuICAgIH0sXG4gICAgb25FcnJvcihlcnJvciwgdmFycywgY29udGV4dCkge1xuICAgICAgLy8gQWxsb3cgdGhlIGNhbGxlciB0byBhZGQgY3VzdG9tIGxvZ2ljIG9uIGVycm9yLlxuICAgICAgbXV0YXRpb24/Lm9uRXJyb3I/LihlcnJvciwgdmFycywgY29udGV4dCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBwbGFjZU9yZGVyOiBtdXRhdGVBc3luYyxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuLyoqXG4gKiAjIEFkZCBhZGRyZXNzIHRvIHByb2ZpbGUuXG4gKlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgUHJvZmlsZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcGFyYW1zXSBObyByZXF1aXJlZCBwYXJhbWV0ZXJzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgbGlua0FkZHJlc3MsIC8vIHVzZU11dGF0aW9uJ3MgYG11dGF0ZUFzeW5jYCBwcm9wZXJ0eVxuICogICAgaXNQZW5kaW5nLFxuICogICAgaXNFcnJvcixcbiAqICAgIGVycm9yLFxuICogICAgc3RhdHVzLFxuICogICAgLi4ubW9yZVVzZU11dGF0aW9uUmVzdWx0c1xuICogfSA9IHVzZUxpbmtBZGRyZXNzKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzI29wZXJhdGlvbi9wcm9maWxlLWFkZHJlc3NlcyB8IEFQSSBEb2N1bWVudGF0aW9ufVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VMaW5rQWRkcmVzcyh7XG4gIG11dGF0aW9uLFxufToge1xuICAvKioge0Bpbmhlcml0RG9jIE11dGF0aW9uT3B0aW9uc30gKi9cbiAgbXV0YXRpb24/OiBNdXRhdGlvbk9wdGlvbnM8TGlua2VkQWRkcmVzcywgRXJyb3IsIExpbmtBZGRyZXNzPjtcbn0gPSB7fSk6IE11dGF0aW9uUmVzdWx0PCdsaW5rQWRkcmVzcycsIExpbmtlZEFkZHJlc3MsIEVycm9yLCBMaW5rQWRkcmVzcz4ge1xuICBjb25zdCBzZGsgPSB1c2VTZGsoKTtcbiAgY29uc3QgeyBpc0F1dGhvcml6ZWQgfSA9IHVzZUF1dGgoKTtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIGNvbnN0IHsgbXV0YXRlQXN5bmMsIC4uLnJlc3QgfSA9IHVzZU11dGF0aW9uKHtcbiAgICAuLi5tdXRhdGlvbixcbiAgICBtdXRhdGlvbktleToga2V5cy5saW5rQWRkcmVzcyxcbiAgICBtdXRhdGlvbkZuOiBhc3luYyAoYm9keTogTGlua0FkZHJlc3MpID0+IHtcbiAgICAgIGlmICghc2RrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gU0RLIGluc3RhbmNlIGF2YWlsYWJsZScpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0F1dGhvcml6ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVc2VyIG5vdCBhdXRob3JpemVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2RrLmxpbmtBZGRyZXNzKGJvZHkpO1xuICAgIH0sXG4gICAgb25TdWNjZXNzKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCkge1xuICAgICAgLy8gUmVmZXRjaCBhbGwgb3JkZXJzIG9uIHN1Y2Nlc3MuXG4gICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldEFkZHJlc3NlcygpLFxuICAgICAgfSk7XG4gICAgICBpZiAodmFyaWFibGVzLnByb2ZpbGUpIHtcbiAgICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICAgIHF1ZXJ5S2V5OiBrZXlzLmdldFByb2ZpbGUodmFyaWFibGVzLnByb2ZpbGUpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHRoZSBjYWxsZXIgdG8gYWRkIGN1c3RvbSBsb2dpYyBvbiBzdWNjZXNzLlxuICAgICAgbXV0YXRpb24/Lm9uU3VjY2Vzcz8uKGRhdGEsIHZhcmlhYmxlcywgY29udGV4dCk7XG4gICAgfSxcbiAgICBvbkVycm9yKGVycm9yLCB2YXJzLCBjb250ZXh0KSB7XG4gICAgICAvLyBBbGxvdyB0aGUgY2FsbGVyIHRvIGFkZCBjdXN0b20gbG9naWMgb24gZXJyb3IuXG4gICAgICBtdXRhdGlvbj8ub25FcnJvcj8uKGVycm9yLCB2YXJzLCBjb250ZXh0KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0sXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGxpbmtBZGRyZXNzOiBtdXRhdGVBc3luYyxcbiAgICAuLi5yZXN0LFxuICB9O1xufVxuXG4vKipcbiAqIEFQSSBjb25zdW1lcnMgaGF2ZSB0aGUgb3B0aW9uIHRvIHN1YnNjcmliZSB0byBhIFdlYlNvY2tldCBmb3IgcmVhbC10aW1lIG9yZGVyIG5vdGlmaWNhdGlvbnMuIFRoaXMgV2ViU29ja2V0IGNvbXBsaWVzIHdpdGggdGhlIHN0YW5kYXJkIFdlYlNvY2tldCBQcm90b2NvbCwgYWxsb3dpbmcgdGhlIHVzZSBvZiBzdGFuZGFyZCBXZWJTb2NrZXQgbGlicmFyaWVzIGZvciBzdWJzY3JpcHRpb24uXG4gKlxuICogVGhlIFdlYlNvY2tldCBlbWl0cyBhbiBldmVudCB3aGVuIGEgb3JkZXIgY2hhbmdlcyBzdGF0ZTpcbiAqXG4gKiBgcGxhY2VkYDogVGhlIG9yZGVyIGhhcyBiZWVuIGNyZWF0ZWQgYnV0IG5vdCB5ZXQgcHJvY2Vzc2VkLlxuICpcbiAqIGBwZW5kaW5nYDogVGhlIG9yZGVyIGlzIGF3YWl0aW5nIGZ1bGZpbGxtZW50IChlLmcuLCByZXZpZXcsIG1pbnRpbmcvYnVybmluZyB0b2tlbnMsIG9yIHNlbmRpbmcvcmVjZWl2aW5nIFNFUEEgcGF5bWVudCkuXG4gKlxuICogYHByb2Nlc3NlZGA6IFRoZSBvcmRlciBoYXMgYmVlbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlxuICpcbiAqIGByZWplY3RlZGA6IFRoZSBvcmRlciB3YXMgcmVqZWN0ZWQsIHBvc3NpYmx5IGR1ZSB0byBjb21wbGlhbmNlIHJlYXNvbnMgb3IgaW5zdWZmaWNpZW50IGZ1bmRzLlxuICogQGdyb3VwIEhvb2tzXG4gKiBAY2F0ZWdvcnkgT3JkZXJzXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zXG4gKiBAcGFyYW0ge09yZGVyU3RhdGV9IFtwYXJhbXMuc3RhdGVdIEZpbHRlciBiYXNlZCBvbiB0aGUgc3RhdGUgb2YgdGhlIG9yZGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IFtwYXJhbXMucHJvZmlsZV0gRmlsdGVyIGJhc2VkIG9uIHRoZSBwcm9maWxlIGlkIG9mIHRoZSBvcmRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcmFtcy5vbk1lc3NhZ2UgQ2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBvcmRlciBub3RpZmljYXRpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGFyYW1zLm9uRXJyb3JdIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgZXJyb3Igbm90aWZpY2F0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3Qge1xuICogICAgc3RhdGUsXG4gKiAgICBwcm9maWxlLFxuICogICAgb25NZXNzYWdlLFxuICogICAgb25FcnJvclxuICogfSA9IHVzZVN1YnNjcmliZU9yZGVyTm90aWZpY2F0aW9uKCk7XG4gKiBgYGBcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uZXJpdW0uZGV2L2FwaS1kb2NzL3YxI29wZXJhdGlvbi9vcmRlcnMtbm90aWZpY2F0aW9uc3wgQVBJIERvY3VtZW50YXRpb259XG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFVuc3Vic2NyaWJlIGZyb20gb3JkZXIgbm90aWZpY2F0aW9ucy5cbiAqL1xuXG5leHBvcnQgY29uc3QgdXNlU3Vic2NyaWJlT3JkZXJOb3RpZmljYXRpb24gPSAoe1xuICBzdGF0ZSxcbiAgcHJvZmlsZSxcbiAgb25NZXNzYWdlLFxuICBvbkVycm9yLFxufToge1xuICBzdGF0ZT86IE9yZGVyU3RhdGU7XG4gIHByb2ZpbGU/OiBzdHJpbmc7XG4gIG9uTWVzc2FnZTogKG9yZGVyOiBPcmRlcikgPT4gdm9pZDtcbiAgb25FcnJvcj86ICgoZXJyOiBFdmVudCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG59KSA9PiB7XG4gIGNvbnN0IHNkayA9IHVzZVNkaygpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNkaykge1xuICAgICAgc2RrLnN1YnNjcmliZU9yZGVyTm90aWZpY2F0aW9ucyh7XG4gICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICBwcm9maWxlOiBwcm9maWxlLFxuICAgICAgICB9LFxuICAgICAgICBvbk1lc3NhZ2U6IG9uTWVzc2FnZSxcbiAgICAgICAgb25FcnJvcjogb25FcnJvcixcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgLyoqXG4gICAgICAgKiBOb3RlIHRoYXQgaW4gZGV2ZWxvcG1lbnQgbW9kZSwgUmVhY3QgU3RyaWN0IG1vZGUgd2lsbCBjYXVzZSB0aGlzXG4gICAgICAgKiBjbGVhbnVwIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB0d2ljZSBvbiBjbGllbnQgc2lkZSByb3V0ZSBjaGFuZ2VzLlxuICAgICAgICogU28gYSBzb2NrZXQgd2lsbCBiZSBpbW1lZGlhdGVseSBjbG9zZWQgYW5kIG9wZW5lZCBhZ2Fpbi5cbiAgICAgICAqIFRoaXMgaXMgbm90IGFuIGlzc3VlIGluIHByb2R1Y3Rpb24gbW9kZS5cbiAgICAgICAqL1xuICAgICAgaWYgKHNkaykge1xuICAgICAgICBzZGs/LnVuc3Vic2NyaWJlT3JkZXJOb3RpZmljYXRpb25zKHsgc3RhdGU6IHN0YXRlLCBwcm9maWxlOiBwcm9maWxlIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtzZGssIHByb2ZpbGUsIHN0YXRlXSk7XG5cbiAgcmV0dXJuICgpID0+XG4gICAgc2RrPy51bnN1YnNjcmliZU9yZGVyTm90aWZpY2F0aW9ucyh7IHN0YXRlOiBzdGF0ZSwgcHJvZmlsZTogcHJvZmlsZSB9KTtcbn07XG5cbi8qKiBFeHBvcnQgdHlwZXMgZm9yIGRvY3VtZW50YXRpb24gKi9cbmV4cG9ydCB0eXBlIHtcbiAgQWRkcmVzcyxcbiAgQmFsYW5jZXMsXG4gIElCQU4sXG4gIE1vdmVJYmFuUGF5bG9hZCxcbiAgTGlua0FkZHJlc3MsXG4gIFByb2ZpbGUsXG4gIFRva2VuLFxuICBTdWJtaXRQcm9maWxlRGV0YWlsc1BheWxvYWQsXG4gIE5ld09yZGVyLFxuICBSZXNwb25zZVN0YXR1cyxcbiAgT3JkZXIsXG59O1xuIl19
|