@prisma/studio-core 0.13.0 → 0.13.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/data/mysql-core/index.cjs +3 -3
- package/dist/data/mysql-core/index.d.cts +50 -11
- package/dist/data/mysql-core/index.d.ts +50 -11
- package/dist/data/mysql-core/index.js +3 -3
- package/dist/metafile-cjs.json +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/ui/index.cjs +1 -1
- package/dist/ui/index.js +1 -1
- package/package.json +1 -1
|
@@ -48,7 +48,23 @@ declare function getSelectQuery(details: AdapterQueryDetails, requirements?: Omi
|
|
|
48
48
|
/**
|
|
49
49
|
* For testing purposes.
|
|
50
50
|
*/
|
|
51
|
-
declare function mockSelectQuery(): [
|
|
51
|
+
declare function mockSelectQuery(): [{
|
|
52
|
+
readonly id: 1;
|
|
53
|
+
readonly created_at: Date;
|
|
54
|
+
readonly deleted_at: null;
|
|
55
|
+
readonly role: "admin";
|
|
56
|
+
readonly name: "Alice";
|
|
57
|
+
readonly name_role: "Alice_admin";
|
|
58
|
+
readonly __ps_count__: "2";
|
|
59
|
+
}, {
|
|
60
|
+
readonly id: 2;
|
|
61
|
+
readonly created_at: Date;
|
|
62
|
+
readonly deleted_at: null;
|
|
63
|
+
readonly role: "member";
|
|
64
|
+
readonly name: "Bob";
|
|
65
|
+
readonly name_role: "Bob_member";
|
|
66
|
+
readonly __ps_count__: "2";
|
|
67
|
+
}];
|
|
52
68
|
declare function getUpdateQuery(details: AdapterUpdateDetails, requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<{
|
|
53
69
|
affectedRows?: number | undefined;
|
|
54
70
|
insertId?: number | undefined;
|
|
@@ -61,7 +77,8 @@ declare function getTablesQuery(requirements?: Omit<BuilderRequirements, "Adapte
|
|
|
61
77
|
name: string;
|
|
62
78
|
schema: string;
|
|
63
79
|
type: "BASE TABLE" | "VIEW";
|
|
64
|
-
columns: {
|
|
80
|
+
columns: Omit<{
|
|
81
|
+
TABLE_NAME: string;
|
|
65
82
|
default: string | null;
|
|
66
83
|
name: string;
|
|
67
84
|
datatype: string;
|
|
@@ -72,7 +89,7 @@ declare function getTablesQuery(requirements?: Omit<BuilderRequirements, "Adapte
|
|
|
72
89
|
autoincrement: kysely.SqlBool;
|
|
73
90
|
computed: kysely.SqlBool;
|
|
74
91
|
nullable: kysely.SqlBool;
|
|
75
|
-
}[];
|
|
92
|
+
}, "TABLE_NAME">[];
|
|
76
93
|
}>;
|
|
77
94
|
declare function mockTablesQuery(): [{
|
|
78
95
|
readonly columns: [{
|
|
@@ -177,7 +194,7 @@ declare function mockTablesQuery(): [{
|
|
|
177
194
|
readonly autoincrement: 0;
|
|
178
195
|
readonly computed: 0;
|
|
179
196
|
readonly datatype: "timestamp";
|
|
180
|
-
readonly default:
|
|
197
|
+
readonly default: "current_timestamp";
|
|
181
198
|
readonly fk_column: null;
|
|
182
199
|
readonly fk_table: null;
|
|
183
200
|
readonly name: "created_at";
|
|
@@ -187,25 +204,47 @@ declare function mockTablesQuery(): [{
|
|
|
187
204
|
}, {
|
|
188
205
|
readonly autoincrement: 0;
|
|
189
206
|
readonly computed: 0;
|
|
190
|
-
readonly datatype: "
|
|
207
|
+
readonly datatype: "timestamp";
|
|
191
208
|
readonly default: null;
|
|
192
209
|
readonly fk_column: null;
|
|
193
210
|
readonly fk_table: null;
|
|
194
|
-
readonly name: "
|
|
195
|
-
readonly nullable:
|
|
211
|
+
readonly name: "deleted_at";
|
|
212
|
+
readonly nullable: 1;
|
|
196
213
|
readonly pk: null;
|
|
197
214
|
readonly position: 3;
|
|
198
215
|
}, {
|
|
199
216
|
readonly autoincrement: 0;
|
|
200
217
|
readonly computed: 0;
|
|
201
|
-
readonly datatype: "
|
|
218
|
+
readonly datatype: "text";
|
|
202
219
|
readonly default: null;
|
|
203
|
-
readonly fk_column:
|
|
204
|
-
readonly fk_table:
|
|
205
|
-
readonly name: "
|
|
220
|
+
readonly fk_column: null;
|
|
221
|
+
readonly fk_table: null;
|
|
222
|
+
readonly name: "role";
|
|
206
223
|
readonly nullable: 1;
|
|
207
224
|
readonly pk: null;
|
|
208
225
|
readonly position: 4;
|
|
226
|
+
}, {
|
|
227
|
+
readonly autoincrement: 0;
|
|
228
|
+
readonly computed: 0;
|
|
229
|
+
readonly datatype: "text";
|
|
230
|
+
readonly default: null;
|
|
231
|
+
readonly fk_column: null;
|
|
232
|
+
readonly fk_table: null;
|
|
233
|
+
readonly name: "name";
|
|
234
|
+
readonly nullable: 1;
|
|
235
|
+
readonly pk: null;
|
|
236
|
+
readonly position: 5;
|
|
237
|
+
}, {
|
|
238
|
+
readonly autoincrement: 0;
|
|
239
|
+
readonly computed: 1;
|
|
240
|
+
readonly datatype: "text";
|
|
241
|
+
readonly default: null;
|
|
242
|
+
readonly fk_column: null;
|
|
243
|
+
readonly fk_table: null;
|
|
244
|
+
readonly name: "name_role";
|
|
245
|
+
readonly nullable: 1;
|
|
246
|
+
readonly pk: null;
|
|
247
|
+
readonly position: 6;
|
|
209
248
|
}];
|
|
210
249
|
readonly name: "users";
|
|
211
250
|
readonly schema: "studio";
|
|
@@ -48,7 +48,23 @@ declare function getSelectQuery(details: AdapterQueryDetails, requirements?: Omi
|
|
|
48
48
|
/**
|
|
49
49
|
* For testing purposes.
|
|
50
50
|
*/
|
|
51
|
-
declare function mockSelectQuery(): [
|
|
51
|
+
declare function mockSelectQuery(): [{
|
|
52
|
+
readonly id: 1;
|
|
53
|
+
readonly created_at: Date;
|
|
54
|
+
readonly deleted_at: null;
|
|
55
|
+
readonly role: "admin";
|
|
56
|
+
readonly name: "Alice";
|
|
57
|
+
readonly name_role: "Alice_admin";
|
|
58
|
+
readonly __ps_count__: "2";
|
|
59
|
+
}, {
|
|
60
|
+
readonly id: 2;
|
|
61
|
+
readonly created_at: Date;
|
|
62
|
+
readonly deleted_at: null;
|
|
63
|
+
readonly role: "member";
|
|
64
|
+
readonly name: "Bob";
|
|
65
|
+
readonly name_role: "Bob_member";
|
|
66
|
+
readonly __ps_count__: "2";
|
|
67
|
+
}];
|
|
52
68
|
declare function getUpdateQuery(details: AdapterUpdateDetails, requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<{
|
|
53
69
|
affectedRows?: number | undefined;
|
|
54
70
|
insertId?: number | undefined;
|
|
@@ -61,7 +77,8 @@ declare function getTablesQuery(requirements?: Omit<BuilderRequirements, "Adapte
|
|
|
61
77
|
name: string;
|
|
62
78
|
schema: string;
|
|
63
79
|
type: "BASE TABLE" | "VIEW";
|
|
64
|
-
columns: {
|
|
80
|
+
columns: Omit<{
|
|
81
|
+
TABLE_NAME: string;
|
|
65
82
|
default: string | null;
|
|
66
83
|
name: string;
|
|
67
84
|
datatype: string;
|
|
@@ -72,7 +89,7 @@ declare function getTablesQuery(requirements?: Omit<BuilderRequirements, "Adapte
|
|
|
72
89
|
autoincrement: kysely.SqlBool;
|
|
73
90
|
computed: kysely.SqlBool;
|
|
74
91
|
nullable: kysely.SqlBool;
|
|
75
|
-
}[];
|
|
92
|
+
}, "TABLE_NAME">[];
|
|
76
93
|
}>;
|
|
77
94
|
declare function mockTablesQuery(): [{
|
|
78
95
|
readonly columns: [{
|
|
@@ -177,7 +194,7 @@ declare function mockTablesQuery(): [{
|
|
|
177
194
|
readonly autoincrement: 0;
|
|
178
195
|
readonly computed: 0;
|
|
179
196
|
readonly datatype: "timestamp";
|
|
180
|
-
readonly default:
|
|
197
|
+
readonly default: "current_timestamp";
|
|
181
198
|
readonly fk_column: null;
|
|
182
199
|
readonly fk_table: null;
|
|
183
200
|
readonly name: "created_at";
|
|
@@ -187,25 +204,47 @@ declare function mockTablesQuery(): [{
|
|
|
187
204
|
}, {
|
|
188
205
|
readonly autoincrement: 0;
|
|
189
206
|
readonly computed: 0;
|
|
190
|
-
readonly datatype: "
|
|
207
|
+
readonly datatype: "timestamp";
|
|
191
208
|
readonly default: null;
|
|
192
209
|
readonly fk_column: null;
|
|
193
210
|
readonly fk_table: null;
|
|
194
|
-
readonly name: "
|
|
195
|
-
readonly nullable:
|
|
211
|
+
readonly name: "deleted_at";
|
|
212
|
+
readonly nullable: 1;
|
|
196
213
|
readonly pk: null;
|
|
197
214
|
readonly position: 3;
|
|
198
215
|
}, {
|
|
199
216
|
readonly autoincrement: 0;
|
|
200
217
|
readonly computed: 0;
|
|
201
|
-
readonly datatype: "
|
|
218
|
+
readonly datatype: "text";
|
|
202
219
|
readonly default: null;
|
|
203
|
-
readonly fk_column:
|
|
204
|
-
readonly fk_table:
|
|
205
|
-
readonly name: "
|
|
220
|
+
readonly fk_column: null;
|
|
221
|
+
readonly fk_table: null;
|
|
222
|
+
readonly name: "role";
|
|
206
223
|
readonly nullable: 1;
|
|
207
224
|
readonly pk: null;
|
|
208
225
|
readonly position: 4;
|
|
226
|
+
}, {
|
|
227
|
+
readonly autoincrement: 0;
|
|
228
|
+
readonly computed: 0;
|
|
229
|
+
readonly datatype: "text";
|
|
230
|
+
readonly default: null;
|
|
231
|
+
readonly fk_column: null;
|
|
232
|
+
readonly fk_table: null;
|
|
233
|
+
readonly name: "name";
|
|
234
|
+
readonly nullable: 1;
|
|
235
|
+
readonly pk: null;
|
|
236
|
+
readonly position: 5;
|
|
237
|
+
}, {
|
|
238
|
+
readonly autoincrement: 0;
|
|
239
|
+
readonly computed: 1;
|
|
240
|
+
readonly datatype: "text";
|
|
241
|
+
readonly default: null;
|
|
242
|
+
readonly fk_column: null;
|
|
243
|
+
readonly fk_table: null;
|
|
244
|
+
readonly name: "name_role";
|
|
245
|
+
readonly nullable: 1;
|
|
246
|
+
readonly pk: null;
|
|
247
|
+
readonly position: 6;
|
|
209
248
|
}];
|
|
210
249
|
readonly name: "users";
|
|
211
250
|
readonly schema: "studio";
|
|
@@ -6,6 +6,6 @@ function require(mod) {
|
|
|
6
6
|
if (mod === 'react-dom') return ___react_dom___;
|
|
7
7
|
throw new Error(`Unknown module ${mod}`);
|
|
8
8
|
}
|
|
9
|
-
import{a as $}from"../../chunk-WEUE32ZL.js";import{a as se}from"../../chunk-6MJRFEB4.js";import{a as i}from"../../chunk-V6YDTHJJ.js";import{A as O,B as F,C as q,D as z,q as _,v as j,w as P,x as Y,z as T}from"../../chunk-UHDZB3FI.js";import{e as E}from"../../chunk-GGFIWHFO.js";E();E();E();var H={bigint:{group:"numeric"},binary:{group:"string"},bit:{group:"raw"},blob:{group:"string"},char:{group:"string"},"char binary":{group:"string"},date:{format:"YYYY-MM-DD",group:"datetime"},datetime:{format:"YYYY-MM-DD HH:mm:ss.SSS",group:"datetime"},dec:{group:"numeric"},decimal:{group:"numeric"},double:{group:"numeric"},"double precision":{group:"numeric"},enum:{group:"enum"},fixed:{group:"numeric"},float:{group:"numeric"},geometry:{group:"raw"},geometrycollection:{group:"raw"},int:{group:"numeric"},integer:{group:"numeric"},json:{group:"json"},linestring:{group:"raw"},long:{group:"string"},"long varchar":{group:"string"},longblob:{group:"string"},longtext:{group:"string"},longvarbinary:{group:"string"},longvarchar:{group:"string"},mediumblob:{group:"string"},mediumint:{group:"numeric"},mediumtext:{group:"string"},multilinestring:{group:"raw"},multipoint:{group:"raw"},multipolygon:{group:"raw"},numeric:{group:"numeric"},point:{group:"raw"},polygon:{group:"raw"},real:{group:"numeric"},set:{group:"raw"},smallint:{group:"numeric"},text:{group:"string"},time:{format:"HH:mm:ss.SSS",group:"time"},timestamp:{format:"YYYY-MM-DD HH:mm:ss.SSS",group:"datetime"},tinyblob:{group:"string"},tinyint:{group:"numeric"},tinytext:{group:"string"},varbinary:{group:"string"},varchar:{group:"string"},"varchar binary":{group:"string"},vector:{group:"raw"},year:{format:"YYYY",group:"numeric"}};E();E();function R(o){return Y({...o,Adapter:P,QueryCompiler:j})}function v(o,t){let{rows:r,table:{columns:u,name:n}}=o,e=R(t);return T(e.deleteFrom(n).$call(O(r,u)).$castTo())}function L(o,t){let{rows:r,table:{columns:u,name:n}}=o,e=R(t);return T(e.insertInto(n).values(q({columns:u,context:"insert",supportsDefaultKeyword:!0,values:r})).$castTo())}function C(o,t){let{criteria:r,table:{columns:u,name:n}}=o,e=R(t);return T(e.selectFrom(n).$call(O(r,u)).select(Object.keys(u)).select(J().as("__ps_inserted_at__")))}function G(o,t){let{changes:r,row:u,table:{columns:n,name:e}}=o,s=R(t);return T(s.selectFrom(e).$call(O([{...u,...r}],n)).select(Object.keys(n)).select(J().as("__ps_updated_at__")))}function K(o,t){let{filter:r={after:"and",filters:[],kind:"FilterGroup"},pageIndex:u,pageSize:n,sortOrder:e,table:{columns:s,name:m}}=o,y=R(t),c=z(r.filters,s),A="__ps_agg__",g="__ps_count__",f=y.selectFrom(m).where(c).select(l=>l.cast(l.fn.coalesce(l.fn.countAll(),_.lit(0)),"char").as(g));return T(y.with(A,()=>f).selectFrom(m).innerJoin(A,l=>l.onTrue()).where(c).select(`${A}.${g}`).select(Object.keys(s)).$call(l=>e.reduce((b,a)=>b.orderBy(a.column,a.direction),l)).limit(n).offset(_.lit(BigInt(u)*BigInt(n))))}function Ee(){return[]}function V(o,t){let{changes:r,row:u,table:{columns:n,name:e,schema:s}}=o,m=R(t);return T(m.withSchema(s).updateTable(e).set(q({columns:n,context:"update",supportsDefaultKeyword:!0,values:r})).$call(O([u],n)).$castTo())}function J(){return _`cast(unix_timestamp(now(3)) * 1000 as unsigned)`}E();E();function W(o){return _`(select cast(coalesce(json_arrayagg(json_object(${_.join(oe(o.toOperationNode(),"agg"))})), '[]') as json) from ${o} as agg)`}function oe(o,t){try{return $(o,t)}catch{throw new Error("MySQL jsonArrayFrom and jsonObjectFrom functions can only handle explicit selections due to limitations of the json_object function. selectAll() is not allowed in the subquery.")}}function X(o){return T(R(o).selectFrom("information_schema.tables as t").where("t.TABLE_SCHEMA","=",_`database()`).where("t.TABLE_TYPE","in",["BASE TABLE","VIEW"]).select(["t.TABLE_SCHEMA as schema","t.TABLE_NAME as name","t.TABLE_TYPE as type"]).$narrowType().select(t=>W(t.selectFrom("information_schema.columns as c").leftJoin("information_schema.KEY_COLUMN_USAGE as kcu",r=>r.onRef("kcu.TABLE_SCHEMA","=","c.TABLE_SCHEMA").onRef("kcu.TABLE_NAME","=","c.TABLE_NAME").onRef("kcu.COLUMN_NAME","=","c.COLUMN_NAME").on("kcu.POSITION_IN_UNIQUE_CONSTRAINT","is not",null)).leftJoin("information_schema.KEY_COLUMN_USAGE as pk_kcu",r=>r.onRef("pk_kcu.TABLE_SCHEMA","=","c.TABLE_SCHEMA").onRef("pk_kcu.TABLE_NAME","=","c.TABLE_NAME").onRef("pk_kcu.COLUMN_NAME","=","c.COLUMN_NAME").on("pk_kcu.CONSTRAINT_NAME","=","PRIMARY")).whereRef("c.TABLE_SCHEMA","=","t.TABLE_SCHEMA").whereRef("c.TABLE_NAME","=","t.TABLE_NAME").select(["c.COLUMN_DEFAULT as default","c.COLUMN_NAME as name","c.COLUMN_TYPE as datatype","c.ORDINAL_POSITION as position","kcu.REFERENCED_TABLE_NAME as fk_table","kcu.REFERENCED_COLUMN_NAME as fk_column","pk_kcu.ORDINAL_POSITION as pk"]).select(r=>[r("c.EXTRA","=","auto_increment").as("autoincrement"),r("c.EXTRA","in",["on update CURRENT_TIMESTAMP","STORED GENERATED","VIRTUAL GENERATED"]).as("computed"),r("c.IS_NULLABLE","=","YES").as("nullable")])).as("columns")).orderBy("t.TABLE_SCHEMA").orderBy("t.TABLE_NAME").orderBy("t.TABLE_TYPE"))}function Z(){return[{columns:[{autoincrement:1,computed:0,datatype:"int",default:null,fk_column:null,fk_table:null,name:"id",nullable:0,pk:1,position:1},{autoincrement:0,computed:0,datatype:"binary(16)",default:"uuid_to_bin(uuid())",fk_column:null,fk_table:null,name:"uuid",nullable:1,pk:null,position:2},{autoincrement:0,computed:0,datatype:"varchar(255)",default:null,fk_column:null,fk_table:null,name:"name",nullable:1,pk:null,position:3},{autoincrement:0,computed:1,datatype:"text",default:null,fk_column:null,fk_table:null,name:"id_name",nullable:1,pk:null,position:4}],name:"animals",schema:"studio",type:"BASE TABLE"},{columns:[{autoincrement:0,computed:0,datatype:"char(36)",default:"uuid()",fk_column:null,fk_table:null,name:"id",nullable:0,pk:1,position:1},{autoincrement:0,computed:0,datatype:"text",default:null,fk_column:null,fk_table:null,name:"name",nullable:0,pk:2,position:2},{autoincrement:0,computed:0,datatype:"timestamp",default:"CURRENT_TIMESTAMP",fk_column:null,fk_table:null,name:"created_at",nullable:1,pk:null,position:3}],name:"composite_pk",schema:"studio",type:"BASE TABLE"},{columns:[{autoincrement:1,computed:0,datatype:"int",default:null,fk_column:null,fk_table:null,name:"id",nullable:0,pk:1,position:1},{autoincrement:0,computed:0,datatype:"timestamp",default:null,fk_column:null,fk_table:null,name:"created_at",nullable:1,pk:null,position:2},{autoincrement:0,computed:0,datatype:"enum('admin','maintainer','member')",default:null,fk_column:null,fk_table:null,name:"role",nullable:0,pk:null,position:3},{autoincrement:0,computed:0,datatype:"int",default:null,fk_column:"id",fk_table:"animals",name:"animal_id",nullable:1,pk:null,position:4}],name:"users",schema:"studio",type:"BASE TABLE"}]}function ee(o){let t=R(o),r=_`@@session.time_zone`;return T(t.selectNoFrom(t.case().when(r,"=","SYSTEM").then(_`@@system_time_zone`).else(r).end().as("timezone")).$narrowType())}function re(){return[{timezone:"UTC"}]}function Ce(o){let{executor:t,...r}=o;return{async delete(u,n){try{let e=v(u,r),[s]=await t.execute(e,n);return s?i({error:s,query:e}):[null,{...u,query:e}]}catch(e){return i({error:e})}},async insert(u,n){try{let{rows:e,table:s}=u,{columns:m}=s,y=Object.values(m).find(a=>a.isAutoincrement),c=e.map(a=>F(a,m)),A=c.some(a=>{let p=Object.values(a);return p.length===0||p.some(d=>d==null)});if(!y&&A)return i({error:new Error("Cannot proceed with the insertion, some rows cannot be refetched after insertion."),query:L(u,r)});if(!A){let a=L(u,r),p=C({criteria:c,table:s},r),d=[a,p],[[h],N]=await t.executeSequence(d,n),k=Q(d);if(h)return i({error:h,query:k});let[M,S]=N;return M?i({error:new Error("Failed to refetch inserted rows - please refresh.",{cause:M}),query:k}):[null,{rows:S,query:k}]}let g=await Promise.all(e.map(async a=>{let p=L({rows:[a],table:s},r),[d,h]=await t.execute(p,n);if(d)return i({error:d,query:p});let{name:N}=y,k=a[N]||h[0]?.insertId;if(!k)return i({error:new Error("Could not determine value for autoincrement column to refetch inserted row."),query:p});let M=C({criteria:[{[N]:k}],table:{...s,columns:Object.values(m).reduce((x,D)=>{let{name:U}=D;return x[U]={...D,pkPosition:U===N?1:null},x},{})}},r),[S,ne]=await t.execute(M,n),B=Q([p,M]);if(S)return console.error("Error refetching inserted row:",S),i({error:new Error("Failed to refetch inserted row - please refresh.",{cause:S}),query:B});let[I]=ne;return I?[null,{row:I,query:B}]:i({error:new Error("Refetch query returned no results for inserted row."),query:B})})),f=[],l=null,b=[];for(let a=0;a<g.length;a++){let[p,d]=g[a];p?(b.push([a,p]),p.query&&(l=l?Q([l,p.query]):p.query)):(f.push(d.row),d.query&&(l=l?Q([l,d.query]):d.query))}return b.length>0?i({error:new AggregateError(b.map(([,a])=>a),`Row${b.length>1?"s":""} ${b.map(([a])=>a).join(", ")} could not be inserted or refetched.`),query:l}):[null,{rows:f,query:l}]}catch(e){return i({error:e})}},async introspect(u){try{let n=X(o),e=ee(o),[[s,m],[y,c]]=await Promise.all([t.execute(n,u),t.execute(e,u)]);if(s)return i({error:s,query:n});if(y)return i({error:y,query:e});let A=c[0]?.timezone;return A?[null,te({query:n,tables:m,timezone:A})]:i({error:new Error("Timezone not found"),query:e})}catch(n){return i({error:n})}},async query(u,n){try{let e=K(u,r),[s,m]=await t.execute(e,n);return s?i({error:s,query:e}):[null,{filteredRowCount:m[0]?.__ps_count__||"0",rows:m,query:e}]}catch(e){return i({error:e})}},async update(u,n){try{let e=V(u,r),s=G(u,r),[[m],y]=await t.executeSequence([e,s],n);if(m)return i({error:m,query:e});let[c,A]=y;if(c)return i({error:c,query:e});let[g]=A;return g?[null,{row:g,query:e}]:i({error:new Error("Updated row not found"),query:e})}catch(e){return i({error:e})}}}}function te(o){let{query:t,tables:r,timezone:u}=o;return r.reduce((n,e)=>{let{schemas:s}=n,{columns:m,name:y,schema:c}=e,A=m.sort((g,f)=>g.position-f.position).reduce((g,f)=>{let{datatype:l,default:b,name:a}=f,p=l.indexOf("("),d=(p>-1?l.substring(0,p):l).trim().toLowerCase(),h=!!f.autoincrement,N=!!f.computed,k=!!f.nullable;return{...g,[a]:{datatype:{...H[d]||{group:"raw"},isArray:!1,isNative:!0,name:d,options:d==="enum"?l.slice(6,-2).split("','"):[],schema:c},defaultValue:b,fkColumn:f.fk_column,fkSchema:c,fkTable:f.fk_table,isAutoincrement:h,isComputed:N,isRequired:!k&&!h&&!N&&b==null,name:a,nullable:k,pkPosition:f.pk,schema:c,table:y}}},{});return s[c]===void 0&&(s[c]={name:c,tables:{}}),s[c].tables[y]={columns:A,name:y,schema:c},n},{filterOperators:ue,query:t,schemas:{},timezone:u})}var ue=["=","!=",">",">=","<","<=","is","is not","like","not like"];function Ie(){let o=Z(),[{timezone:t}]=re();return te({tables:o,timezone:t,query:{parameters:[],sql:"<mocked>"}})}function Q(o){let[t,r]=o;return{parameters:t.parameters.concat(r.parameters),sql:`${t.sql};
|
|
10
|
-
${
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vZGF0YS9teXNxbC1jb3JlL2luZGV4LnRzIiwgIi4uLy4uLy4uL2RhdGEvbXlzcWwtY29yZS9hZGFwdGVyLnRzIiwgIi4uLy4uLy4uL2RhdGEvbXlzcWwtY29yZS9kYXRhdHlwZS50cyIsICIuLi8uLi8uLi9kYXRhL215c3FsLWNvcmUvZG1sLnRzIiwgIi4uLy4uLy4uL2RhdGEvbXlzcWwtY29yZS9idWlsZGVyLnRzIiwgIi4uLy4uLy4uL2RhdGEvbXlzcWwtY29yZS9pbnRyb3NwZWN0aW9uLnRzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vaGVscGVycy9teXNxbC5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0ICogZnJvbSBcIi4vYWRhcHRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZG1sXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pbnRyb3NwZWN0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsaXR5XCI7XG4iLCAiaW1wb3J0IHtcbiAgdHlwZSBBZGFwdGVyLFxuICB0eXBlIEFkYXB0ZXJEZWxldGVSZXN1bHQsXG4gIHR5cGUgQWRhcHRlckVycm9yLFxuICB0eXBlIEFkYXB0ZXJJbnNlcnRSZXN1bHQsXG4gIHR5cGUgQWRhcHRlckludHJvc3BlY3RSZXN1bHQsXG4gIHR5cGUgQWRhcHRlclF1ZXJ5UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJSZXF1aXJlbWVudHMsXG4gIHR5cGUgQWRhcHRlclVwZGF0ZVJlc3VsdCxcbiAgdHlwZSBDb2x1bW4sXG4gIGNyZWF0ZUFkYXB0ZXJFcnJvcixcbiAgdHlwZSBGaWx0ZXJPcGVyYXRvcixcbiAgdHlwZSBUYWJsZSxcbn0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgU2VxdWVuY2VFeGVjdXRvciB9IGZyb20gXCIuLi9leGVjdXRvclwiO1xuaW1wb3J0IHsgaW5mZXJGaWx0ZXJPYmplY3QsIHR5cGUgUXVlcnksIHR5cGUgUXVlcnlSZXN1bHQgfSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB0eXBlIHsgRWl0aGVyIH0gZnJvbSBcIi4uL3R5cGUtdXRpbHNcIjtcbmltcG9ydCB7IE1ZU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEEgfSBmcm9tIFwiLi9kYXRhdHlwZVwiO1xuaW1wb3J0IHtcbiAgZ2V0RGVsZXRlUXVlcnksXG4gIGdldEluc2VydFF1ZXJ5LFxuICBnZXRJbnNlcnRSZWZldGNoUXVlcnksXG4gIGdldFNlbGVjdFF1ZXJ5LFxuICBnZXRVcGRhdGVRdWVyeSxcbiAgZ2V0VXBkYXRlUmVmZXRjaFF1ZXJ5LFxufSBmcm9tIFwiLi9kbWxcIjtcbmltcG9ydCB7IGdldFRhYmxlc1F1ZXJ5LCBnZXRUaW1lem9uZVF1ZXJ5LCBtb2NrVGFibGVzUXVlcnksIG1vY2tUaW1lem9uZVF1ZXJ5IH0gZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuXG5leHBvcnQgdHlwZSBNeVNRTEFkYXB0ZXJSZXF1aXJlbWVudHMgPSBPbWl0PEFkYXB0ZXJSZXF1aXJlbWVudHMsIFwiZXhlY3V0b3JcIj4gJiB7XG4gIGV4ZWN1dG9yOiBTZXF1ZW5jZUV4ZWN1dG9yO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU15U1FMQWRhcHRlcihyZXF1aXJlbWVudHM6IE15U1FMQWRhcHRlclJlcXVpcmVtZW50cyk6IEFkYXB0ZXIge1xuICBjb25zdCB7IGV4ZWN1dG9yLCAuLi5vdGhlclJlcXVpcmVtZW50cyB9ID0gcmVxdWlyZW1lbnRzO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgZGVsZXRlKGRldGFpbHMsIG9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJEZWxldGVSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldERlbGV0ZVF1ZXJ5KGRldGFpbHMsIG90aGVyUmVxdWlyZW1lbnRzKTtcblxuICAgICAgICBjb25zdCBbZXJyb3JdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZShxdWVyeSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyAuLi5kZXRhaWxzLCBxdWVyeSB9XTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGluc2VydChkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW5zZXJ0UmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyByb3dzLCB0YWJsZSB9ID0gZGV0YWlscztcbiAgICAgICAgY29uc3QgeyBjb2x1bW5zIH0gPSB0YWJsZTtcblxuICAgICAgICBjb25zdCBhdXRvaW5jcmVtZW50Q29sdW1uOiBDb2x1bW4gfCB1bmRlZmluZWQgPSBPYmplY3QudmFsdWVzKGNvbHVtbnMpLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLmlzQXV0b2luY3JlbWVudCk7XG5cbiAgICAgICAgY29uc3QgZmlsdGVyT2JqZWN0cyA9IHJvd3MubWFwKChyb3cpID0+IGluZmVyRmlsdGVyT2JqZWN0KHJvdywgY29sdW1ucykpO1xuXG4gICAgICAgIGNvbnN0IGhhc1BhcnRpYWxGaWx0ZXJPYmplY3RzID0gZmlsdGVyT2JqZWN0cy5zb21lKChmaWx0ZXJPYmplY3QpID0+IHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJWYWx1ZXMgPSBPYmplY3QudmFsdWVzKGZpbHRlck9iamVjdCk7XG5cbiAgICAgICAgICByZXR1cm4gZmlsdGVyVmFsdWVzLmxlbmd0aCA9PT0gMCB8fCBmaWx0ZXJWYWx1ZXMuc29tZSgodmFsdWUpID0+IHZhbHVlID09IG51bGwpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgY2xhc3NpYyBwYXJ0aWFsIGZpbHRlciBvYmplY3QgY2FzZXMgKGUuZy4gdXVpZCkgaGVyZSBvciBiZWZvcmUgcmVxdWVzdGluZyBmcm9tIGFkYXB0ZXIuXG4gICAgICAgIGlmICghYXV0b2luY3JlbWVudENvbHVtbiAmJiBoYXNQYXJ0aWFsRmlsdGVyT2JqZWN0cykge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3Ioe1xuICAgICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcihcIkNhbm5vdCBwcm9jZWVkIHdpdGggdGhlIGluc2VydGlvbiwgc29tZSByb3dzIGNhbm5vdCBiZSByZWZldGNoZWQgYWZ0ZXIgaW5zZXJ0aW9uLlwiKSxcbiAgICAgICAgICAgIHF1ZXJ5OiBnZXRJbnNlcnRRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWhhc1BhcnRpYWxGaWx0ZXJPYmplY3RzKSB7XG4gICAgICAgICAgY29uc3QgaW5zZXJ0UXVlcnkgPSBnZXRJbnNlcnRRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG4gICAgICAgICAgY29uc3QgcmVmZXRjaFF1ZXJ5ID0gZ2V0SW5zZXJ0UmVmZXRjaFF1ZXJ5KHsgY3JpdGVyaWE6IGZpbHRlck9iamVjdHMsIHRhYmxlIH0sIG90aGVyUmVxdWlyZW1lbnRzKTtcbiAgICAgICAgICBjb25zdCBzZXF1ZW5jZSA9IFtpbnNlcnRRdWVyeSwgcmVmZXRjaFF1ZXJ5XSBhcyBjb25zdDtcblxuICAgICAgICAgIGNvbnN0IFtbaW5zZXJ0RXJyb3JdLCBtYXliZVJlZmV0Y2hSZXN1bHRdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZVNlcXVlbmNlKHNlcXVlbmNlLCBvcHRpb25zKTtcblxuICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gam9pblNlcXVlbmNlKHNlcXVlbmNlKTtcblxuICAgICAgICAgIGlmIChpbnNlcnRFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBpbnNlcnRFcnJvciwgcXVlcnkgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgW3JlZmV0Y2hFcnJvciwgcmVmZXRjaFJlc3VsdHNdID0gbWF5YmVSZWZldGNoUmVzdWx0ITtcblxuICAgICAgICAgIGlmIChyZWZldGNoRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3Ioe1xuICAgICAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJlZmV0Y2ggaW5zZXJ0ZWQgcm93cyAtIHBsZWFzZSByZWZyZXNoLlwiLCB7IGNhdXNlOiByZWZldGNoRXJyb3IgfSksXG4gICAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIFtudWxsLCB7IHJvd3M6IHJlZmV0Y2hSZXN1bHRzLCBxdWVyeSB9XTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhcyBhdXRvaW5jcmVtZW50IGNvbHVtbiAtIGluc2VydCByb3dzIG9uZSBieSBvbmUgYW5kIHJlZmV0Y2gsIHRha2luZyBhZHZhbnRhZ2Ugb2YgYGluc2VydElkYCBpZiBpbnNlcnRlZCByb3cgaGFzIG5vIHZhbHVlIGZvciB0aGlzIGNvbHVtbi5cbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIHJvd3MubWFwKGFzeW5jIChyb3cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluc2VydFF1ZXJ5ID0gZ2V0SW5zZXJ0UXVlcnkoeyByb3dzOiBbcm93XSwgdGFibGUgfSwgb3RoZXJSZXF1aXJlbWVudHMpO1xuXG4gICAgICAgICAgICBjb25zdCBbZXJyb3IsIHJlc3VsdF0gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKGluc2VydFF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnk6IGluc2VydFF1ZXJ5IH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB7IG5hbWU6IGF1dG9pbmNyZW1lbnRDb2x1bW5OYW1lIH0gPSBhdXRvaW5jcmVtZW50Q29sdW1uITtcblxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByb3dbYXV0b2luY3JlbWVudENvbHVtbk5hbWVdIHx8IHJlc3VsdFswXT8uaW5zZXJ0SWQ7XG5cbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7XG4gICAgICAgICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBkZXRlcm1pbmUgdmFsdWUgZm9yIGF1dG9pbmNyZW1lbnQgY29sdW1uIHRvIHJlZmV0Y2ggaW5zZXJ0ZWQgcm93LlwiKSxcbiAgICAgICAgICAgICAgICBxdWVyeTogaW5zZXJ0UXVlcnksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByZWZldGNoUXVlcnkgPSBnZXRJbnNlcnRSZWZldGNoUXVlcnkoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjcml0ZXJpYTogW3sgW2F1dG9pbmNyZW1lbnRDb2x1bW5OYW1lXTogdmFsdWUgfV0sXG4gICAgICAgICAgICAgICAgdGFibGU6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnRhYmxlLFxuICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGRpcnR5IGhhY2sgdG8gbWFyayBhdXRvaW5jcmVtZW50IGNvbHVtbiBhcyBUSEUgcHJpbWFyeSBrZXkgZm9yIHJlZmV0Y2hpbmcuXG4gICAgICAgICAgICAgICAgICBjb2x1bW5zOiBPYmplY3QudmFsdWVzKGNvbHVtbnMpLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgKGFjYywgY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBuYW1lOiBjb2x1bW5OYW1lIH0gPSBjb2x1bW47XG5cbiAgICAgICAgICAgICAgICAgICAgICBhY2NbY29sdW1uTmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBwa1Bvc2l0aW9uOiBjb2x1bW5OYW1lID09PSBhdXRvaW5jcmVtZW50Q29sdW1uTmFtZSA/IDEgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7fSBhcyBUYWJsZVtcImNvbHVtbnNcIl0sXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG90aGVyUmVxdWlyZW1lbnRzLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgW3JlZmV0Y2hFcnJvciwgcmVmZXRjaFJlc3VsdHNdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZShyZWZldGNoUXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgICAgICBjb25zdCBxdWVyeSA9IGpvaW5TZXF1ZW5jZShbaW5zZXJ0UXVlcnksIHJlZmV0Y2hRdWVyeV0pO1xuXG4gICAgICAgICAgICBpZiAocmVmZXRjaEVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciByZWZldGNoaW5nIGluc2VydGVkIHJvdzpcIiwgcmVmZXRjaEVycm9yKTtcblxuICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHtcbiAgICAgICAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJlZmV0Y2ggaW5zZXJ0ZWQgcm93IC0gcGxlYXNlIHJlZnJlc2guXCIsIHsgY2F1c2U6IHJlZmV0Y2hFcnJvciB9KSxcbiAgICAgICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IFtyZWZldGNoZWRSb3ddID0gcmVmZXRjaFJlc3VsdHM7XG5cbiAgICAgICAgICAgIGlmICghcmVmZXRjaGVkUm93KSB7XG4gICAgICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3Ioe1xuICAgICAgICAgICAgICAgIGVycm9yOiBuZXcgRXJyb3IoXCJSZWZldGNoIHF1ZXJ5IHJldHVybmVkIG5vIHJlc3VsdHMgZm9yIGluc2VydGVkIHJvdy5cIiksXG4gICAgICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gW251bGwsIHsgcm93OiByZWZldGNoZWRSb3csIHF1ZXJ5IH1dIGFzIGNvbnN0O1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGluc2VydGVkUm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSA9IFtdO1xuICAgICAgICBsZXQgcXVlcnk6IFF1ZXJ5PHVua25vd24+IHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGNvbnN0IGVycm9yczogW251bWJlciwgQWRhcHRlckVycm9yXVtdID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgW2Vycm9yLCByZXN1bHRdID0gcmVzdWx0c1tpXSE7XG5cbiAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKFtpLCBlcnJvcl0pO1xuXG4gICAgICAgICAgICBpZiAoZXJyb3IucXVlcnkpIHtcbiAgICAgICAgICAgICAgcXVlcnkgPSAhcXVlcnkgPyBlcnJvci5xdWVyeSA6IGpvaW5TZXF1ZW5jZShbcXVlcnksIGVycm9yLnF1ZXJ5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluc2VydGVkUm93cy5wdXNoKHJlc3VsdC5yb3cpO1xuXG4gICAgICAgICAgICBpZiAocmVzdWx0LnF1ZXJ5KSB7XG4gICAgICAgICAgICAgIHF1ZXJ5ID0gIXF1ZXJ5ID8gcmVzdWx0LnF1ZXJ5IDogam9pblNlcXVlbmNlKFtxdWVyeSwgcmVzdWx0LnF1ZXJ5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7XG4gICAgICAgICAgICBlcnJvcjogbmV3IEFnZ3JlZ2F0ZUVycm9yKFxuICAgICAgICAgICAgICBlcnJvcnMubWFwKChbLCBlcnJvcl0pID0+IGVycm9yKSxcbiAgICAgICAgICAgICAgYFJvdyR7ZXJyb3JzLmxlbmd0aCA+IDEgPyBcInNcIiA6IFwiXCJ9ICR7ZXJyb3JzLm1hcCgoW2luZGV4XSkgPT4gaW5kZXgpLmpvaW4oXCIsIFwiKX0gY291bGQgbm90IGJlIGluc2VydGVkIG9yIHJlZmV0Y2hlZC5gLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHF1ZXJ5OiBxdWVyeSEsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgcm93czogaW5zZXJ0ZWRSb3dzLCBxdWVyeTogcXVlcnkhIH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgaW50cm9zcGVjdChvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW50cm9zcGVjdFJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRhYmxlc1F1ZXJ5ID0gZ2V0VGFibGVzUXVlcnkocmVxdWlyZW1lbnRzKTtcbiAgICAgICAgY29uc3QgdGltZXpvbmVRdWVyeSA9IGdldFRpbWV6b25lUXVlcnkocmVxdWlyZW1lbnRzKTtcblxuICAgICAgICBjb25zdCBbW3RhYmxlc0Vycm9yLCB0YWJsZXNdLCBbdGltZXpvbmVFcnJvciwgdGltZXpvbmVzXV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgZXhlY3V0b3IuZXhlY3V0ZSh0YWJsZXNRdWVyeSwgb3B0aW9ucyksXG4gICAgICAgICAgZXhlY3V0b3IuZXhlY3V0ZSh0aW1lem9uZVF1ZXJ5LCBvcHRpb25zKSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgaWYgKHRhYmxlc0Vycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiB0YWJsZXNFcnJvciwgcXVlcnk6IHRhYmxlc1F1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbWV6b25lRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IHRpbWV6b25lRXJyb3IsIHF1ZXJ5OiB0aW1lem9uZVF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGltZXpvbmUgPSB0aW1lem9uZXNbMF0/LnRpbWV6b25lO1xuXG4gICAgICAgIGlmICghdGltZXpvbmUpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IG5ldyBFcnJvcihcIlRpbWV6b25lIG5vdCBmb3VuZFwiKSwgcXVlcnk6IHRpbWV6b25lUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIGNyZWF0ZUludHJvc3BlY3Rpb24oeyBxdWVyeTogdGFibGVzUXVlcnksIHRhYmxlcywgdGltZXpvbmUgfSldO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgcXVlcnkoZGV0YWlscywgb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlclF1ZXJ5UmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXRTZWxlY3RRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG5cbiAgICAgICAgY29uc3QgW2Vycm9yLCByZXN1bHRzXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgZmlsdGVyZWRSb3dDb3VudDogcmVzdWx0c1swXT8uX19wc19jb3VudF9fIHx8IFwiMFwiLCByb3dzOiByZXN1bHRzLCBxdWVyeSB9XTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHVwZGF0ZShkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyVXBkYXRlUmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdXBkYXRlUXVlcnkgPSBnZXRVcGRhdGVRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG4gICAgICAgIGNvbnN0IHJlZmV0Y2hRdWVyeSA9IGdldFVwZGF0ZVJlZmV0Y2hRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG5cbiAgICAgICAgY29uc3QgW1t1cGRhdGVFcnJvcl0sIHJlZmV0Y2hSZXN1bHRdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZVNlcXVlbmNlKFt1cGRhdGVRdWVyeSwgcmVmZXRjaFF1ZXJ5XSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKHVwZGF0ZUVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiB1cGRhdGVFcnJvciwgcXVlcnk6IHVwZGF0ZVF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgW3JlZmV0Y2hFcnJvciwgcmVzdWx0c10gPSByZWZldGNoUmVzdWx0ITtcblxuICAgICAgICBpZiAocmVmZXRjaEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiByZWZldGNoRXJyb3IsIHF1ZXJ5OiB1cGRhdGVRdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IFtyb3ddID0gcmVzdWx0cztcblxuICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogbmV3IEVycm9yKFwiVXBkYXRlZCByb3cgbm90IGZvdW5kXCIpLCBxdWVyeTogdXBkYXRlUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgcm93LCBxdWVyeTogdXBkYXRlUXVlcnkgfV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUludHJvc3BlY3Rpb24oYXJnczoge1xuICBxdWVyeTogUXVlcnk7XG4gIHRhYmxlczogUXVlcnlSZXN1bHQ8dHlwZW9mIGdldFRhYmxlc1F1ZXJ5PjtcbiAgdGltZXpvbmU6IHN0cmluZztcbn0pOiBBZGFwdGVySW50cm9zcGVjdFJlc3VsdCB7XG4gIGNvbnN0IHsgcXVlcnksIHRhYmxlcywgdGltZXpvbmUgfSA9IGFyZ3M7XG5cbiAgcmV0dXJuIHRhYmxlcy5yZWR1Y2UoXG4gICAgKHJlc3VsdCwgdGFibGUpID0+IHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hcyB9ID0gcmVzdWx0O1xuICAgICAgY29uc3QgeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUsIHNjaGVtYSB9ID0gdGFibGU7XG5cbiAgICAgIGNvbnN0IGNvbHVtbnNSZWNvcmQgPSBjb2x1bW5zXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBvc2l0aW9uIC0gYi5wb3NpdGlvbilcbiAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAoY29sdW1ucywgY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGF0eXBlLCBkZWZhdWx0OiBkZWZhdWx0VmFsdWUsIG5hbWU6IGNvbHVtbk5hbWUgfSA9IGNvbHVtbjtcblxuICAgICAgICAgICAgY29uc3QgaW5kZXhPZlBhcmVudGhlc2lzID0gZGF0YXR5cGUuaW5kZXhPZihcIihcIik7XG4gICAgICAgICAgICBjb25zdCBzdHJpcHBlZERhdGFUeXBlID0gKGluZGV4T2ZQYXJlbnRoZXNpcyA+IC0xID8gZGF0YXR5cGUuc3Vic3RyaW5nKDAsIGluZGV4T2ZQYXJlbnRoZXNpcykgOiBkYXRhdHlwZSlcbiAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgY29uc3QgaXNBdXRvaW5jcmVtZW50ID0gQm9vbGVhbihjb2x1bW4uYXV0b2luY3JlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBpc0NvbXB1dGVkID0gQm9vbGVhbihjb2x1bW4uY29tcHV0ZWQpO1xuICAgICAgICAgICAgY29uc3QgbnVsbGFibGUgPSBCb29sZWFuKGNvbHVtbi5udWxsYWJsZSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNvbHVtbnMsXG4gICAgICAgICAgICAgIFtjb2x1bW5OYW1lXToge1xuICAgICAgICAgICAgICAgIGRhdGF0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAuLi4oTVlTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQVtzdHJpcHBlZERhdGFUeXBlXSB8fCB7IGdyb3VwOiBcInJhd1wiIH0pLFxuICAgICAgICAgICAgICAgICAgaXNBcnJheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBpc05hdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IHN0cmlwcGVkRGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgICBvcHRpb25zOlxuICAgICAgICAgICAgICAgICAgICBzdHJpcHBlZERhdGFUeXBlID09PSBcImVudW1cIiA/IGRhdGF0eXBlLnNsaWNlKGBlbnVtKCdgLmxlbmd0aCwgLWAnKWAubGVuZ3RoKS5zcGxpdChgJywnYCkgOiBbXSxcbiAgICAgICAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgICBma0NvbHVtbjogY29sdW1uLmZrX2NvbHVtbixcbiAgICAgICAgICAgICAgICBma1NjaGVtYTogc2NoZW1hLFxuICAgICAgICAgICAgICAgIGZrVGFibGU6IGNvbHVtbi5ma190YWJsZSxcbiAgICAgICAgICAgICAgICBpc0F1dG9pbmNyZW1lbnQsXG4gICAgICAgICAgICAgICAgaXNDb21wdXRlZCxcbiAgICAgICAgICAgICAgICBpc1JlcXVpcmVkOiAhbnVsbGFibGUgJiYgIWlzQXV0b2luY3JlbWVudCAmJiAhaXNDb21wdXRlZCAmJiBkZWZhdWx0VmFsdWUgPT0gbnVsbCxcbiAgICAgICAgICAgICAgICBuYW1lOiBjb2x1bW5OYW1lLFxuICAgICAgICAgICAgICAgIG51bGxhYmxlLFxuICAgICAgICAgICAgICAgIHBrUG9zaXRpb246IGNvbHVtbi5wayxcbiAgICAgICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICAgICAgdGFibGU6IHRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgfSBhcyBjb25zdCBzYXRpc2ZpZXMgQ29sdW1uLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHt9IGFzIFRhYmxlW1wiY29sdW1uc1wiXSxcbiAgICAgICAgKTtcblxuICAgICAgaWYgKHNjaGVtYXNbc2NoZW1hXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNjaGVtYXNbc2NoZW1hXSA9IHsgbmFtZTogc2NoZW1hLCB0YWJsZXM6IHt9IH07XG4gICAgICB9XG5cbiAgICAgIHNjaGVtYXNbc2NoZW1hXS50YWJsZXNbdGFibGVOYW1lXSA9IHsgY29sdW1uczogY29sdW1uc1JlY29yZCwgbmFtZTogdGFibGVOYW1lLCBzY2hlbWEgfTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHsgZmlsdGVyT3BlcmF0b3JzLCBxdWVyeSwgc2NoZW1hczoge30sIHRpbWV6b25lIH0gc2F0aXNmaWVzIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0IGFzIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0LFxuICApO1xufVxuXG5jb25zdCBmaWx0ZXJPcGVyYXRvcnMgPSBbXG4gIFwiPVwiLFxuICBcIiE9XCIsXG4gIFwiPlwiLFxuICBcIj49XCIsXG4gIFwiPFwiLFxuICBcIjw9XCIsXG4gIFwiaXNcIixcbiAgXCJpcyBub3RcIixcbiAgXCJsaWtlXCIsXG4gIFwibm90IGxpa2VcIixcbl0gc2F0aXNmaWVzIEZpbHRlck9wZXJhdG9yW107XG5cbi8qKlxuICogRm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrSW50cm9zcGVjdCgpIHtcbiAgY29uc3QgdGFibGVzID0gbW9ja1RhYmxlc1F1ZXJ5KCk7XG4gIGNvbnN0IFt7IHRpbWV6b25lIH1dID0gbW9ja1RpbWV6b25lUXVlcnkoKTtcbiAgY29uc3QgcXVlcnkgPSB7IHBhcmFtZXRlcnM6IFtdLCBzcWw6IFwiPG1vY2tlZD5cIiB9IGFzIFF1ZXJ5O1xuXG4gIHJldHVybiBjcmVhdGVJbnRyb3NwZWN0aW9uKHsgdGFibGVzLCB0aW1lem9uZSwgcXVlcnkgfSkgYXMge1xuICAgIC8vIGJlc3QgZWZmb3J0LCBubyBuZWVkIGdvIG92ZXJib2FyZC5cbiAgICBzY2hlbWFzOiB7XG4gICAgICBbSyBpbiAodHlwZW9mIHRhYmxlcylbbnVtYmVyXVtcInNjaGVtYVwiXV06IHtcbiAgICAgICAgbmFtZTogSztcbiAgICAgICAgdGFibGVzOiB7XG4gICAgICAgICAgW1QgaW4gKHR5cGVvZiB0YWJsZXMpW251bWJlcl1bXCJuYW1lXCJdXTogVGFibGU7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH07XG4gICAgdGltZXpvbmU6IHR5cGVvZiB0aW1lem9uZTtcbiAgICBmaWx0ZXJPcGVyYXRvcnM6IEZpbHRlck9wZXJhdG9yW107XG4gICAgcXVlcnk6IFF1ZXJ5O1xuICB9IHNhdGlzZmllcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdDtcbn1cblxuZnVuY3Rpb24gam9pblNlcXVlbmNlKHNlcXVlbmNlOiByZWFkb25seSBbUXVlcnk8dW5rbm93bj4sIFF1ZXJ5PHVua25vd24+XSk6IFF1ZXJ5PHVua25vd24+IHtcbiAgY29uc3QgW3F1ZXJ5MCwgcXVlcnkxXSA9IHNlcXVlbmNlO1xuXG4gIHJldHVybiB7XG4gICAgcGFyYW1ldGVyczogcXVlcnkwLnBhcmFtZXRlcnMuY29uY2F0KHF1ZXJ5MS5wYXJhbWV0ZXJzKSxcbiAgICBzcWw6IGAke3F1ZXJ5MC5zcWx9O1xcbiR7cXVlcnkxLnNxbH1gLFxuICB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgRGF0YVR5cGUgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuXG5leHBvcnQgY29uc3QgTVlTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQTogUmVjb3JkPHN0cmluZywgUGljazxEYXRhVHlwZSwgXCJmb3JtYXRcIiB8IFwiZ3JvdXBcIj4+ID0ge1xuICBiaWdpbnQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGJpbmFyeToge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBiaXQ6IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgYmxvYjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBjaGFyOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIFwiY2hhciBiaW5hcnlcIjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBkYXRlOiB7XG4gICAgZm9ybWF0OiBcIllZWVktTU0tRERcIixcbiAgICBncm91cDogXCJkYXRldGltZVwiLFxuICB9LFxuICBkYXRldGltZToge1xuICAgIGZvcm1hdDogXCJZWVlZLU1NLUREIEhIOm1tOnNzLlNTU1wiLFxuICAgIGdyb3VwOiBcImRhdGV0aW1lXCIsXG4gIH0sXG4gIGRlYzoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgZGVjaW1hbDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgZG91YmxlOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBcImRvdWJsZSBwcmVjaXNpb25cIjoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgZW51bToge1xuICAgIGdyb3VwOiBcImVudW1cIixcbiAgfSxcbiAgZml4ZWQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGZsb2F0OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBnZW9tZXRyeToge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBnZW9tZXRyeWNvbGxlY3Rpb246IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgaW50OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBpbnRlZ2VyOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBqc29uOiB7XG4gICAgZ3JvdXA6IFwianNvblwiLFxuICB9LFxuICBsaW5lc3RyaW5nOiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIGxvbmc6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgXCJsb25nIHZhcmNoYXJcIjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBsb25nYmxvYjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBsb25ndGV4dDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBsb25ndmFyYmluYXJ5OiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIGxvbmd2YXJjaGFyOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIG1lZGl1bWJsb2I6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgbWVkaXVtaW50OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBtZWRpdW10ZXh0OiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIG11bHRpbGluZXN0cmluZzoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBtdWx0aXBvaW50OiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIG11bHRpcG9seWdvbjoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBudW1lcmljOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBwb2ludDoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBwb2x5Z29uOiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIHJlYWw6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBodHRwczovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi85LjUvZW4vc2V0Lmh0bWxcbiAgICovXG4gIHNldDoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBzbWFsbGludDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgdGV4dDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICB0aW1lOiB7XG4gICAgZm9ybWF0OiBcIkhIOm1tOnNzLlNTU1wiLFxuICAgIGdyb3VwOiBcInRpbWVcIixcbiAgfSxcbiAgdGltZXN0YW1wOiB7XG4gICAgZm9ybWF0OiBcIllZWVktTU0tREQgSEg6bW06c3MuU1NTXCIsXG4gICAgZ3JvdXA6IFwiZGF0ZXRpbWVcIixcbiAgfSxcbiAgdGlueWJsb2I6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgdGlueWludDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgdGlueXRleHQ6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgdmFyYmluYXJ5OiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIHZhcmNoYXI6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgXCJ2YXJjaGFyIGJpbmFyeVwiOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBodHRwczovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi85LjUvZW4vdmVjdG9yLmh0bWxcbiAgICovXG4gIHZlY3Rvcjoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICB5ZWFyOiB7XG4gICAgZm9ybWF0OiBcIllZWVlcIixcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG59O1xuIiwgImltcG9ydCB7IHR5cGUgSW5mZXJSZXN1bHQsIHR5cGUgU2ltcGxlUmVmZXJlbmNlRXhwcmVzc2lvbiwgc3FsIH0gZnJvbSBcImt5c2VseVwiO1xuaW1wb3J0IHR5cGUgeyBPa1BhY2tldFBhcmFtcyB9IGZyb20gXCJteXNxbDJcIjtcblxuaW1wb3J0IHR5cGUgeyBBZGFwdGVyRGVsZXRlRGV0YWlscywgQWRhcHRlclF1ZXJ5RGV0YWlscywgQWRhcHRlclVwZGF0ZURldGFpbHMsIFRhYmxlIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB7XG4gIGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzLFxuICBhcHBseVRyYW5zZm9ybWF0aW9ucyxcbiAgdHlwZSBCdWlsZGVyUmVxdWlyZW1lbnRzLFxuICBjb21waWxlLFxuICBnZXRTZWxlY3RGaWx0ZXJFeHByZXNzaW9uLFxufSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB0eXBlIHsgQmlnSW50U3RyaW5nIH0gZnJvbSBcIi4uL3R5cGUtdXRpbHNcIjtcbmltcG9ydCB7IGdldE15U1FMQnVpbGRlciB9IGZyb20gXCIuL2J1aWxkZXJcIjtcbmltcG9ydCB7IG1vY2tUYWJsZXNRdWVyeSB9IGZyb20gXCIuL2ludHJvc3BlY3Rpb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlbGV0ZVF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyRGVsZXRlRGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgcm93cyxcbiAgICB0YWJsZTogeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUgfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldE15U1FMQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KHJlcXVpcmVtZW50cyk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoYnVpbGRlci5kZWxldGVGcm9tKHRhYmxlTmFtZSkuJGNhbGwoYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMocm93cywgY29sdW1ucykpLiRjYXN0VG88T2tQYWNrZXRQYXJhbXM+KCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5zZXJ0UXVlcnkoXG4gIGRldGFpbHM6IHsgcm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTsgdGFibGU6IFRhYmxlIH0sXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIHJvd3MsXG4gICAgdGFibGU6IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRNeVNRTEJ1aWxkZXI8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC5pbnNlcnRJbnRvKHRhYmxlTmFtZSlcbiAgICAgIC52YWx1ZXMoYXBwbHlUcmFuc2Zvcm1hdGlvbnMoeyBjb2x1bW5zLCBjb250ZXh0OiBcImluc2VydFwiLCBzdXBwb3J0c0RlZmF1bHRLZXl3b3JkOiB0cnVlLCB2YWx1ZXM6IHJvd3MgfSkpXG4gICAgICAuJGNhc3RUbzxPa1BhY2tldFBhcmFtcz4oKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEluc2VydFJlZmV0Y2hRdWVyeShcbiAgZGV0YWlsczogeyBjcml0ZXJpYTogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTsgdGFibGU6IFRhYmxlIH0sXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIGNyaXRlcmlhLFxuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSB9LFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID0gZ2V0TXlTUUxCdWlsZGVyPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcblxuICByZXR1cm4gY29tcGlsZShcbiAgICBidWlsZGVyXG4gICAgICAuc2VsZWN0RnJvbSh0YWJsZU5hbWUpXG4gICAgICAuJGNhbGwoYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMoY3JpdGVyaWEsIGNvbHVtbnMpKVxuICAgICAgLnNlbGVjdChPYmplY3Qua2V5cyhjb2x1bW5zKSlcbiAgICAgIC5zZWxlY3QoZ2V0Q3VycmVudFRpbWVzdGFtcE1pbGxpcygpLmFzKFwiX19wc19pbnNlcnRlZF9hdF9fXCIpKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVwZGF0ZVJlZmV0Y2hRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlclVwZGF0ZURldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIGNoYW5nZXMsXG4gICAgcm93LFxuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSB9LFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID0gZ2V0TXlTUUxCdWlsZGVyPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcblxuICByZXR1cm4gY29tcGlsZShcbiAgICBidWlsZGVyXG4gICAgICAuc2VsZWN0RnJvbSh0YWJsZU5hbWUpXG4gICAgICAuJGNhbGwoYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMoW3sgLi4ucm93LCAuLi5jaGFuZ2VzIH1dLCBjb2x1bW5zKSlcbiAgICAgIC5zZWxlY3QoT2JqZWN0LmtleXMoY29sdW1ucykpXG4gICAgICAuc2VsZWN0KGdldEN1cnJlbnRUaW1lc3RhbXBNaWxsaXMoKS5hcyhcIl9fcHNfdXBkYXRlZF9hdF9fXCIpKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdFF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyUXVlcnlEZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHtcbiAgICBmaWx0ZXIgPSB7IGFmdGVyOiBcImFuZFwiLCBmaWx0ZXJzOiBbXSwga2luZDogXCJGaWx0ZXJHcm91cFwiIH0sXG4gICAgcGFnZUluZGV4LFxuICAgIHBhZ2VTaXplLFxuICAgIHNvcnRPcmRlcixcbiAgICB0YWJsZTogeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUgfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldE15U1FMQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KHJlcXVpcmVtZW50cyk7XG5cbiAgY29uc3QgZmlsdGVyRXhwcmVzc2lvbiA9IGdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24oZmlsdGVyLmZpbHRlcnMsIGNvbHVtbnMpO1xuXG4gIGNvbnN0IEFHR19OQU1FID0gXCJfX3BzX2FnZ19fXCI7XG4gIGNvbnN0IENPVU5UX1JFRiA9IFwiX19wc19jb3VudF9fXCI7XG5cbiAgY29uc3QgY291bnRRdWVyeSA9IGJ1aWxkZXJcbiAgICAuc2VsZWN0RnJvbSh0YWJsZU5hbWUpXG4gICAgLndoZXJlKGZpbHRlckV4cHJlc3Npb24pXG4gICAgLnNlbGVjdCgoZWIpID0+IGViLmNhc3Q8QmlnSW50U3RyaW5nPihlYi5mbi5jb2FsZXNjZShlYi5mbi5jb3VudEFsbCgpLCBzcWwubGl0KDApKSwgXCJjaGFyXCIpLmFzKENPVU5UX1JFRikpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC53aXRoKEFHR19OQU1FLCAoKSA9PiBjb3VudFF1ZXJ5KVxuICAgICAgLnNlbGVjdEZyb20odGFibGVOYW1lKVxuICAgICAgLmlubmVySm9pbihBR0dfTkFNRSwgKGpiKSA9PiBqYi5vblRydWUoKSlcbiAgICAgIC8vIFRPRE86IGN1cnNvciBwYWdpbmF0aW9uP1xuICAgICAgLndoZXJlKGZpbHRlckV4cHJlc3Npb24pXG4gICAgICAuc2VsZWN0KFxuICAgICAgICBgJHtBR0dfTkFNRX0uJHtDT1VOVF9SRUZ9YCBzYXRpc2ZpZXMgU2ltcGxlUmVmZXJlbmNlRXhwcmVzc2lvbjxcbiAgICAgICAgICB7IFtBR0dfTkFNRV06IEluZmVyUmVzdWx0PHR5cGVvZiBjb3VudFF1ZXJ5PltudW1iZXJdIH0sXG4gICAgICAgICAgdHlwZW9mIEFHR19OQU1FXG4gICAgICAgID4sXG4gICAgICApXG4gICAgICAuc2VsZWN0KE9iamVjdC5rZXlzKGNvbHVtbnMpKVxuICAgICAgLiRjYWxsKChxYikgPT4gc29ydE9yZGVyLnJlZHVjZSgocWIsIGl0ZW0pID0+IHFiLm9yZGVyQnkoaXRlbS5jb2x1bW4sIGl0ZW0uZGlyZWN0aW9uKSwgcWIpKVxuICAgICAgLmxpbWl0KHBhZ2VTaXplKVxuICAgICAgLy8gd2UncmUgaW5qZWN0aW5nIHRoZSBvZmZzZXQgdmFsdWUgaGVyZSB0byBhdm9pZCBzZXJpYWxpemF0aW9uIGNvbXBsZXhpdHkgKGBiaWdpbnRgIGlzIGEgbm8tZ28gZm9yIGBKU09OLnN0cmluZ2lmeWApLlxuICAgICAgLm9mZnNldChzcWwubGl0KEJpZ0ludChwYWdlSW5kZXgpICogQmlnSW50KHBhZ2VTaXplKSkpLFxuICApO1xufVxuXG4vKipcbiAqIEZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja1NlbGVjdFF1ZXJ5KCkge1xuICAvLyBUT0RPOiAuLi5cbiAgcmV0dXJuIFtdIGFzIGNvbnN0IHNhdGlzZmllcyB7XG4gICAgLy8gYmVzdCBlZmZvcnQgbm8gbmVlZCB0byBnbyBvdmVyYm9hcmRcbiAgICBbSyBpbiBSZXR1cm5UeXBlPHR5cGVvZiBtb2NrVGFibGVzUXVlcnk+WzFdW1wiY29sdW1uc1wiXVtudW1iZXJdW1wibmFtZVwiXSB8IFwiX19wc19jb3VudF9fXCJdOiB1bmtub3duO1xuICB9W107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVcGRhdGVRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlclVwZGF0ZURldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIGNoYW5nZXMsXG4gICAgcm93LFxuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSwgc2NoZW1hIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRNeVNRTEJ1aWxkZXI8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC53aXRoU2NoZW1hKHNjaGVtYSlcbiAgICAgIC51cGRhdGVUYWJsZSh0YWJsZU5hbWUpXG4gICAgICAuc2V0KGFwcGx5VHJhbnNmb3JtYXRpb25zKHsgY29sdW1ucywgY29udGV4dDogXCJ1cGRhdGVcIiwgc3VwcG9ydHNEZWZhdWx0S2V5d29yZDogdHJ1ZSwgdmFsdWVzOiBjaGFuZ2VzIH0pKVxuICAgICAgLiRjYWxsKGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzKFtyb3ddLCBjb2x1bW5zKSlcbiAgICAgIC4kY2FzdFRvPE9rUGFja2V0UGFyYW1zPigpLFxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50VGltZXN0YW1wTWlsbGlzKCkge1xuICByZXR1cm4gc3FsPG51bWJlciB8IHN0cmluZz5gY2FzdCh1bml4X3RpbWVzdGFtcChub3coMykpICogMTAwMCBhcyB1bnNpZ25lZClgO1xufVxuIiwgImltcG9ydCB7IHR5cGUgS3lzZWx5LCBNeXNxbEFkYXB0ZXIsIE15c3FsUXVlcnlDb21waWxlciB9IGZyb20gXCJreXNlbHlcIjtcblxuaW1wb3J0IHsgdHlwZSBCdWlsZGVyUmVxdWlyZW1lbnRzLCBnZXRCdWlsZGVyIH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgZnVuY3Rpb24gZ2V0TXlTUUxCdWlsZGVyPERhdGFiYXNlID0gYW55PihcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbik6IEt5c2VseTxEYXRhYmFzZT4ge1xuICByZXR1cm4gZ2V0QnVpbGRlcih7IC4uLnJlcXVpcmVtZW50cywgQWRhcHRlcjogTXlzcWxBZGFwdGVyLCBRdWVyeUNvbXBpbGVyOiBNeXNxbFF1ZXJ5Q29tcGlsZXIgfSk7XG59XG4iLCAiaW1wb3J0IHsgc3FsIH0gZnJvbSBcImt5c2VseVwiO1xuaW1wb3J0IHsganNvbkFycmF5RnJvbSB9IGZyb20gXCJreXNlbHkvaGVscGVycy9teXNxbFwiO1xuXG5pbXBvcnQgeyB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsIGNvbXBpbGUsIHR5cGUgUXVlcnlSZXN1bHQgfSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB7IGdldE15U1FMQnVpbGRlciB9IGZyb20gXCIuL2J1aWxkZXJcIjtcblxuaW50ZXJmYWNlIERhdGFiYXNlIHtcbiAgLyoqIGh0dHBzOi8vZGV2Lm15c3FsLmNvbS9kb2MvcmVmbWFuLzguNC9lbi9pbmZvcm1hdGlvbi1zY2hlbWEta2V5LWNvbHVtbi11c2FnZS10YWJsZS5odG1sICovXG4gIFwiaW5mb3JtYXRpb25fc2NoZW1hLktFWV9DT0xVTU5fVVNBR0VcIjoge1xuICAgIENPTFVNTl9OQU1FOiBzdHJpbmc7XG4gICAgQ09OU1RSQUlOVF9OQU1FOiBzdHJpbmc7XG4gICAgT1JESU5BTF9QT1NJVElPTjogbnVtYmVyO1xuICAgIC8qKiBudWxsIC0gd2hlbiB1bmlxdWUgb3IgcHJpbWFyeSBrZXkgY29uc3RyYWludC4gMS1uIC0gd2hlbiBmb3JlaWduIGtleSBjb25zdHJhaW50ICovXG4gICAgUE9TSVRJT05fSU5fVU5JUVVFX0NPTlNUUkFJTlQ6IG51bWJlciB8IG51bGw7XG4gICAgUkVGRVJFTkNFRF9DT0xVTU5fTkFNRTogc3RyaW5nO1xuICAgIFJFRkVSRU5DRURfVEFCTEVfTkFNRTogc3RyaW5nO1xuICAgIFRBQkxFX05BTUU6IHN0cmluZztcbiAgICBUQUJMRV9TQ0hFTUE6IHN0cmluZztcbiAgfTtcbiAgLyoqIGh0dHBzOi8vZGV2Lm15c3FsLmNvbS9kb2MvcmVmbWFuLzguNC9lbi9pbmZvcm1hdGlvbi1zY2hlbWEtY29sdW1ucy10YWJsZS5odG1sICovXG4gIFwiaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnNcIjoge1xuICAgIC8qKiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvbHVtbi4gVGhpcyBpcyBOVUxMIGlmIHRoZSBjb2x1bW4gaGFzIGFuIGV4cGxpY2l0IGRlZmF1bHQgb2YgTlVMTCwgb3IgaWYgdGhlIGNvbHVtbiBkZWZpbml0aW9uIGluY2x1ZGVzIG5vIERFRkFVTFQgY2xhdXNlLiAqL1xuICAgIENPTFVNTl9ERUZBVUxUOiBzdHJpbmcgfCBudWxsO1xuICAgIENPTFVNTl9OQU1FOiBzdHJpbmc7XG4gICAgLyoqIENvbnRhaW5zIHRoZSB0eXBlIG5hbWUgYW5kIHBvc3NpYmx5IG90aGVyIGluZm9ybWF0aW9uIHN1Y2ggYXMgdGhlIHByZWNpc2lvbiBvciBsZW5ndGguICovXG4gICAgQ09MVU1OX1RZUEU6IHN0cmluZztcbiAgICAvKiogRXh0cmEgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbHVtbi4gUG9zc2libGUgdmFsdWVzIGFyZSAqL1xuICAgIEVYVFJBOlxuICAgICAgfCBcIlwiXG4gICAgICB8IFwiYXV0b19pbmNyZW1lbnRcIlxuICAgICAgfCBcIm9uIHVwZGF0ZSBDVVJSRU5UX1RJTUVTVEFNUFwiXG4gICAgICB8IFwiU1RPUkVEIEdFTkVSQVRFRFwiXG4gICAgICB8IFwiVklSVFVBTCBHRU5FUkFURURcIlxuICAgICAgfCBcIkRFRkFVTFQgR0VORVJBVEVEXCI7XG4gICAgSVNfTlVMTEFCTEU6IFwiWUVTXCIgfCBcIk5PXCI7XG4gICAgLyoqIFRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uIHdpdGhpbiB0aGUgdGFibGUuIE9SRElOQUxfUE9TSVRJT04gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgeW91IG1pZ2h0IHdhbnQgdG8gc2F5IE9SREVSIEJZIE9SRElOQUxfUE9TSVRJT04uIFVubGlrZSBTSE9XIENPTFVNTlMsIFNFTEVDVCBmcm9tIHRoZSBDT0xVTU5TIHRhYmxlIGRvZXMgbm90IGhhdmUgYXV0b21hdGljIG9yZGVyaW5nLiAqL1xuICAgIE9SRElOQUxfUE9TSVRJT046IG51bWJlcjtcbiAgICBUQUJMRV9OQU1FOiBzdHJpbmc7XG4gICAgVEFCTEVfU0NIRU1BOiBzdHJpbmc7XG4gIH07XG4gIC8qKiBodHRwczovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi84LjQvZW4vaW5mb3JtYXRpb24tc2NoZW1hLXRhYmxlcy10YWJsZS5odG1sICovXG4gIFwiaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlc1wiOiB7XG4gICAgVEFCTEVfTkFNRTogc3RyaW5nO1xuICAgIC8qKiBUaGUgbmFtZSBvZiB0aGUgc2NoZW1hIChkYXRhYmFzZSkgdG8gd2hpY2ggdGhlIHRhYmxlIGJlbG9uZ3MuICovXG4gICAgVEFCTEVfU0NIRU1BOiBzdHJpbmc7XG4gICAgLyoqIEJBU0UgVEFCTEUgZm9yIGEgdGFibGUsIFZJRVcgZm9yIGEgdmlldywgb3IgU1lTVEVNIFZJRVcgZm9yIGFuIElORk9STUFUSU9OX1NDSEVNQSB0YWJsZS4gKi9cbiAgICBUQUJMRV9UWVBFOiBcIkJBU0UgVEFCTEVcIiB8IFwiVklFV1wiIHwgXCJTWVNURU0gVklFV1wiO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVzUXVlcnkocmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPikge1xuICByZXR1cm4gY29tcGlsZShcbiAgICBnZXRNeVNRTEJ1aWxkZXI8RGF0YWJhc2U+KHJlcXVpcmVtZW50cylcbiAgICAgIC5zZWxlY3RGcm9tKFwiaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyBhcyB0XCIpXG4gICAgICAud2hlcmUoXCJ0LlRBQkxFX1NDSEVNQVwiLCBcIj1cIiwgc3FsPHN0cmluZz5gZGF0YWJhc2UoKWApXG4gICAgICAud2hlcmUoXCJ0LlRBQkxFX1RZUEVcIiwgXCJpblwiLCBbXCJCQVNFIFRBQkxFXCIsIFwiVklFV1wiXSlcbiAgICAgIC5zZWxlY3QoW1widC5UQUJMRV9TQ0hFTUEgYXMgc2NoZW1hXCIsIFwidC5UQUJMRV9OQU1FIGFzIG5hbWVcIiwgXCJ0LlRBQkxFX1RZUEUgYXMgdHlwZVwiXSlcbiAgICAgIC4kbmFycm93VHlwZTx7IHR5cGU6IFwiQkFTRSBUQUJMRVwiIHwgXCJWSUVXXCIgfT4oKVxuICAgICAgLnNlbGVjdCgoZWIpID0+XG4gICAgICAgIC8vIGBqc29uX2FycmF5YWdnYCBpZ25vcmVzIGBvcmRlciBieWAgaW5zaWRlIHRoZSBzdWJxdWVyeSwgc28gd2UgbmVlZCB0byBvcmRlciBhZnRlciBhZ2dyZWdhdGlvbi5cbiAgICAgICAganNvbkFycmF5RnJvbShcbiAgICAgICAgICBlYlxuICAgICAgICAgICAgLnNlbGVjdEZyb20oXCJpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyBhcyBjXCIpXG4gICAgICAgICAgICAubGVmdEpvaW4oXCJpbmZvcm1hdGlvbl9zY2hlbWEuS0VZX0NPTFVNTl9VU0FHRSBhcyBrY3VcIiwgKGpiKSA9PlxuICAgICAgICAgICAgICBqYlxuICAgICAgICAgICAgICAgIC5vblJlZihcImtjdS5UQUJMRV9TQ0hFTUFcIiwgXCI9XCIsIFwiYy5UQUJMRV9TQ0hFTUFcIilcbiAgICAgICAgICAgICAgICAub25SZWYoXCJrY3UuVEFCTEVfTkFNRVwiLCBcIj1cIiwgXCJjLlRBQkxFX05BTUVcIilcbiAgICAgICAgICAgICAgICAub25SZWYoXCJrY3UuQ09MVU1OX05BTUVcIiwgXCI9XCIsIFwiYy5DT0xVTU5fTkFNRVwiKVxuICAgICAgICAgICAgICAgIC8vIG9ubHkgZ2V0IGZvcmVpZ24ga2V5IGNvbnN0cmFpbnRzXG4gICAgICAgICAgICAgICAgLm9uKFwia2N1LlBPU0lUSU9OX0lOX1VOSVFVRV9DT05TVFJBSU5UXCIsIFwiaXMgbm90XCIsIG51bGwpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmxlZnRKb2luKFwiaW5mb3JtYXRpb25fc2NoZW1hLktFWV9DT0xVTU5fVVNBR0UgYXMgcGtfa2N1XCIsIChqYikgPT5cbiAgICAgICAgICAgICAgamJcbiAgICAgICAgICAgICAgICAub25SZWYoXCJwa19rY3UuVEFCTEVfU0NIRU1BXCIsIFwiPVwiLCBcImMuVEFCTEVfU0NIRU1BXCIpXG4gICAgICAgICAgICAgICAgLm9uUmVmKFwicGtfa2N1LlRBQkxFX05BTUVcIiwgXCI9XCIsIFwiYy5UQUJMRV9OQU1FXCIpXG4gICAgICAgICAgICAgICAgLm9uUmVmKFwicGtfa2N1LkNPTFVNTl9OQU1FXCIsIFwiPVwiLCBcImMuQ09MVU1OX05BTUVcIilcbiAgICAgICAgICAgICAgICAvLyBvbmx5IGdldCBwcmltYXJ5IGtleSBjb25zdHJhaW50IC0gZ3VhcmFudGVlZCB0byBiZSBcIlBSSU1BUllcIiBldmVuIGlmIGEgbmFtZSB3YXMgZ2l2ZW4gZHVyaW5nIGNyZWF0aW9uXG4gICAgICAgICAgICAgICAgLm9uKFwicGtfa2N1LkNPTlNUUkFJTlRfTkFNRVwiLCBcIj1cIiwgXCJQUklNQVJZXCIpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLndoZXJlUmVmKFwiYy5UQUJMRV9TQ0hFTUFcIiwgXCI9XCIsIFwidC5UQUJMRV9TQ0hFTUFcIilcbiAgICAgICAgICAgIC53aGVyZVJlZihcImMuVEFCTEVfTkFNRVwiLCBcIj1cIiwgXCJ0LlRBQkxFX05BTUVcIilcbiAgICAgICAgICAgIC5zZWxlY3QoW1xuICAgICAgICAgICAgICBcImMuQ09MVU1OX0RFRkFVTFQgYXMgZGVmYXVsdFwiLFxuICAgICAgICAgICAgICBcImMuQ09MVU1OX05BTUUgYXMgbmFtZVwiLFxuICAgICAgICAgICAgICBcImMuQ09MVU1OX1RZUEUgYXMgZGF0YXR5cGVcIixcbiAgICAgICAgICAgICAgXCJjLk9SRElOQUxfUE9TSVRJT04gYXMgcG9zaXRpb25cIixcbiAgICAgICAgICAgICAgXCJrY3UuUkVGRVJFTkNFRF9UQUJMRV9OQU1FIGFzIGZrX3RhYmxlXCIsXG4gICAgICAgICAgICAgIFwia2N1LlJFRkVSRU5DRURfQ09MVU1OX05BTUUgYXMgZmtfY29sdW1uXCIsXG4gICAgICAgICAgICAgIFwicGtfa2N1Lk9SRElOQUxfUE9TSVRJT04gYXMgcGtcIixcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAuc2VsZWN0KChlYikgPT4gW1xuICAgICAgICAgICAgICBlYihcImMuRVhUUkFcIiwgXCI9XCIsIFwiYXV0b19pbmNyZW1lbnRcIikuYXMoXCJhdXRvaW5jcmVtZW50XCIpLFxuICAgICAgICAgICAgICBlYihcImMuRVhUUkFcIiwgXCJpblwiLCBbXCJvbiB1cGRhdGUgQ1VSUkVOVF9USU1FU1RBTVBcIiwgXCJTVE9SRUQgR0VORVJBVEVEXCIsIFwiVklSVFVBTCBHRU5FUkFURURcIl0pLmFzKFxuICAgICAgICAgICAgICAgIFwiY29tcHV0ZWRcIixcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgZWIoXCJjLklTX05VTExBQkxFXCIsIFwiPVwiLCBcIllFU1wiKS5hcyhcIm51bGxhYmxlXCIpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICkuYXMoXCJjb2x1bW5zXCIpLFxuICAgICAgKVxuICAgICAgLm9yZGVyQnkoXCJ0LlRBQkxFX1NDSEVNQVwiKVxuICAgICAgLm9yZGVyQnkoXCJ0LlRBQkxFX05BTUVcIilcbiAgICAgIC5vcmRlckJ5KFwidC5UQUJMRV9UWVBFXCIpLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja1RhYmxlc1F1ZXJ5KCkge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9pbmNyZW1lbnQ6IDEsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiaW50XCIsXG4gICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgbmFtZTogXCJpZFwiLFxuICAgICAgICAgIG51bGxhYmxlOiAwLFxuICAgICAgICAgIHBrOiAxLFxuICAgICAgICAgIHBvc2l0aW9uOiAxLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYXV0b2luY3JlbWVudDogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBkYXRhdHlwZTogXCJiaW5hcnkoMTYpXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJ1dWlkX3RvX2Jpbih1dWlkKCkpXCIsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIG5hbWU6IFwidXVpZFwiLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIHBrOiBudWxsLFxuICAgICAgICAgIHBvc2l0aW9uOiAyLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYXV0b2luY3JlbWVudDogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBkYXRhdHlwZTogXCJ2YXJjaGFyKDI1NSlcIixcbiAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBwazogbnVsbCxcbiAgICAgICAgICBwb3NpdGlvbjogMyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9pbmNyZW1lbnQ6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDEsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIG5hbWU6IFwiaWRfbmFtZVwiLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIHBrOiBudWxsLFxuICAgICAgICAgIHBvc2l0aW9uOiA0LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIG5hbWU6IFwiYW5pbWFsc1wiLFxuICAgICAgc2NoZW1hOiBcInN0dWRpb1wiLFxuICAgICAgdHlwZTogXCJCQVNFIFRBQkxFXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvaW5jcmVtZW50OiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIGRhdGF0eXBlOiBcImNoYXIoMzYpXCIsXG4gICAgICAgICAgZGVmYXVsdDogXCJ1dWlkKClcIixcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgbmFtZTogXCJpZFwiLFxuICAgICAgICAgIG51bGxhYmxlOiAwLFxuICAgICAgICAgIHBrOiAxLFxuICAgICAgICAgIHBvc2l0aW9uOiAxLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYXV0b2luY3JlbWVudDogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBkYXRhdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgbmFtZTogXCJuYW1lXCIsXG4gICAgICAgICAgbnVsbGFibGU6IDAsXG4gICAgICAgICAgcGs6IDIsXG4gICAgICAgICAgcG9zaXRpb246IDIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvaW5jcmVtZW50OiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRpbWVzdGFtcFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwiQ1VSUkVOVF9USU1FU1RBTVBcIixcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgbmFtZTogXCJjcmVhdGVkX2F0XCIsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgcGs6IG51bGwsXG4gICAgICAgICAgcG9zaXRpb246IDMsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgbmFtZTogXCJjb21wb3NpdGVfcGtcIixcbiAgICAgIHNjaGVtYTogXCJzdHVkaW9cIixcbiAgICAgIHR5cGU6IFwiQkFTRSBUQUJMRVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAgYXV0b2luY3JlbWVudDogMSxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBkYXRhdHlwZTogXCJpbnRcIixcbiAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgICAgbnVsbGFibGU6IDAsXG4gICAgICAgICAgcGs6IDEsXG4gICAgICAgICAgcG9zaXRpb246IDEsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvaW5jcmVtZW50OiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRpbWVzdGFtcFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIG5hbWU6IFwiY3JlYXRlZF9hdFwiLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIHBrOiBudWxsLFxuICAgICAgICAgIHBvc2l0aW9uOiAyLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYXV0b2luY3JlbWVudDogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBkYXRhdHlwZTogXCJlbnVtKCdhZG1pbicsJ21haW50YWluZXInLCdtZW1iZXInKVwiLFxuICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIG5hbWU6IFwicm9sZVwiLFxuICAgICAgICAgIG51bGxhYmxlOiAwLFxuICAgICAgICAgIHBrOiBudWxsLFxuICAgICAgICAgIHBvc2l0aW9uOiAzLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYXV0b2luY3JlbWVudDogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBkYXRhdHlwZTogXCJpbnRcIixcbiAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogXCJpZFwiLFxuICAgICAgICAgIGZrX3RhYmxlOiBcImFuaW1hbHNcIixcbiAgICAgICAgICBuYW1lOiBcImFuaW1hbF9pZFwiLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIHBrOiBudWxsLFxuICAgICAgICAgIHBvc2l0aW9uOiA0LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIG5hbWU6IFwidXNlcnNcIixcbiAgICAgIHNjaGVtYTogXCJzdHVkaW9cIixcbiAgICAgIHR5cGU6IFwiQkFTRSBUQUJMRVwiLFxuICAgIH0sXG4gIF0gYXMgY29uc3Qgc2F0aXNmaWVzIFF1ZXJ5UmVzdWx0PHR5cGVvZiBnZXRUYWJsZXNRdWVyeT47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lem9uZVF1ZXJ5KHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4pIHtcbiAgY29uc3QgYnVpbGRlciA9IGdldE15U1FMQnVpbGRlcihyZXF1aXJlbWVudHMpO1xuXG4gIGNvbnN0IHNlc3Npb25UeiA9IHNxbDxcIlNZU1RFTVwiIHwgKHN0cmluZyAmIHt9KT5gQEBzZXNzaW9uLnRpbWVfem9uZWA7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLnNlbGVjdE5vRnJvbShcbiAgICAgICAgYnVpbGRlclxuICAgICAgICAgIC5jYXNlKClcbiAgICAgICAgICAud2hlbihzZXNzaW9uVHosIFwiPVwiLCBcIlNZU1RFTVwiKVxuICAgICAgICAgIC50aGVuKHNxbDxzdHJpbmc+YEBAc3lzdGVtX3RpbWVfem9uZWApXG4gICAgICAgICAgLmVsc2Uoc2Vzc2lvblR6KVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC5hcyhcInRpbWV6b25lXCIpLFxuICAgICAgKVxuICAgICAgLiRuYXJyb3dUeXBlPHsgdGltZXpvbmU6IHN0cmluZyB9PigpLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja1RpbWV6b25lUXVlcnkoKSB7XG4gIHJldHVybiBbeyB0aW1lem9uZTogXCJVVENcIiB9XSBhcyBjb25zdCBzYXRpc2ZpZXMgUXVlcnlSZXN1bHQ8dHlwZW9mIGdldFRpbWV6b25lUXVlcnk+O1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9teXNxbC5kLnRzXCIgLz5cbmltcG9ydCB7IHNxbCB9IGZyb20gJy4uL3Jhdy1idWlsZGVyL3NxbC5qcyc7XG5pbXBvcnQgeyBnZXRKc29uT2JqZWN0QXJncyB9IGZyb20gJy4uL3V0aWwvanNvbi1vYmplY3QtYXJncy5qcyc7XG4vKipcbiAqIEEgTXlTUUwgaGVscGVyIGZvciBhZ2dyZWdhdGluZyBhIHN1YnF1ZXJ5IGludG8gYSBKU09OIGFycmF5LlxuICpcbiAqIE5PVEU6IFRoaXMgaGVscGVyIGlzIG9ubHkgZ3VhcmFudGVlZCB0byBmdWxseSB3b3JrIHdpdGggdGhlIGJ1aWx0LWluIGBNeXNxbERpYWxlY3RgLlxuICogV2hpbGUgdGhlIHByb2R1Y2VkIFNRTCBpcyBjb21wYXRpYmxlIHdpdGggYWxsIE15U1FMIGRhdGFiYXNlcywgc29tZSB0aGlyZC1wYXJ0eSBkaWFsZWN0c1xuICogbWF5IG5vdCBwYXJzZSB0aGUgbmVzdGVkIEpTT04gaW50byBhcnJheXMuIEluIHRoZXNlIGNhc2VzIHlvdSBjYW4gdXNlIHRoZSBidWlsdCBpblxuICogYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gIHRvIHBhcnNlIHRoZSByZXN1bHRzLlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqc29uQXJyYXlGcm9tIH0gZnJvbSAna3lzZWx5L2hlbHBlcnMvbXlzcWwnXG4gKlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gKiAgIC5zZWxlY3QoKGViKSA9PiBbXG4gKiAgICAgJ2lkJyxcbiAqICAgICBqc29uQXJyYXlGcm9tKFxuICogICAgICAgZWIuc2VsZWN0RnJvbSgncGV0JylcbiAqICAgICAgICAgLnNlbGVjdChbJ3BldC5pZCBhcyBwZXRfaWQnLCAncGV0Lm5hbWUnXSlcbiAqICAgICAgICAgLndoZXJlUmVmKCdwZXQub3duZXJfaWQnLCAnPScsICdwZXJzb24uaWQnKVxuICogICAgICAgICAub3JkZXJCeSgncGV0Lm5hbWUnKVxuICogICAgICkuYXMoJ3BldHMnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKlxuICogcmVzdWx0WzBdPy5pZFxuICogcmVzdWx0WzBdPy5wZXRzWzBdPy5wZXRfaWRcbiAqIHJlc3VsdFswXT8ucGV0c1swXT8ubmFtZVxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBgaWRgLCAoXG4gKiAgIHNlbGVjdCBjYXN0KGNvYWxlc2NlKGpzb25fYXJyYXlhZ2coanNvbl9vYmplY3QoXG4gKiAgICAgJ3BldF9pZCcsIGBhZ2dgLmBwZXRfaWRgLFxuICogICAgICduYW1lJywgYGFnZ2AuYG5hbWVgXG4gKiAgICkpLCAnW10nKSBhcyBqc29uKSBmcm9tIChcbiAqICAgICBzZWxlY3QgYHBldGAuYGlkYCBhcyBgcGV0X2lkYCwgYHBldGAuYG5hbWVgXG4gKiAgICAgZnJvbSBgcGV0YFxuICogICAgIHdoZXJlIGBwZXRgLmBvd25lcl9pZGAgPSBgcGVyc29uYC5gaWRgXG4gKiAgICAgb3JkZXIgYnkgYHBldGAuYG5hbWVgXG4gKiAgICkgYXMgYGFnZ2BcbiAqICkgYXMgYHBldHNgXG4gKiBmcm9tIGBwZXJzb25gXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25BcnJheUZyb20oZXhwcikge1xuICAgIHJldHVybiBzcWwgYChzZWxlY3QgY2FzdChjb2FsZXNjZShqc29uX2FycmF5YWdnKGpzb25fb2JqZWN0KCR7c3FsLmpvaW4oZ2V0TXlzcWxKc29uT2JqZWN0QXJncyhleHByLnRvT3BlcmF0aW9uTm9kZSgpLCAnYWdnJykpfSkpLCAnW10nKSBhcyBqc29uKSBmcm9tICR7ZXhwcn0gYXMgYWdnKWA7XG59XG4vKipcbiAqIEEgTXlTUUwgaGVscGVyIGZvciB0dXJuaW5nIGEgc3VicXVlcnkgaW50byBhIEpTT04gb2JqZWN0LlxuICpcbiAqIFRoZSBzdWJxdWVyeSBtdXN0IG9ubHkgcmV0dXJuIG9uZSByb3cuXG4gKlxuICogTk9URTogVGhpcyBoZWxwZXIgaXMgb25seSBndWFyYW50ZWVkIHRvIGZ1bGx5IHdvcmsgd2l0aCB0aGUgYnVpbHQtaW4gYE15c3FsRGlhbGVjdGAuXG4gKiBXaGlsZSB0aGUgcHJvZHVjZWQgU1FMIGlzIGNvbXBhdGlibGUgd2l0aCBhbGwgTXlTUUwgZGF0YWJhc2VzLCBzb21lIHRoaXJkLXBhcnR5IGRpYWxlY3RzXG4gKiBtYXkgbm90IHBhcnNlIHRoZSBuZXN0ZWQgSlNPTiBpbnRvIG9iamVjdHMuIEluIHRoZXNlIGNhc2VzIHlvdSBjYW4gdXNlIHRoZSBidWlsdCBpblxuICogYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gIHRvIHBhcnNlIHRoZSByZXN1bHRzLlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqc29uT2JqZWN0RnJvbSB9IGZyb20gJ2t5c2VseS9oZWxwZXJzL215c3FsJ1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICogICAuc2VsZWN0KChlYikgPT4gW1xuICogICAgICdpZCcsXG4gKiAgICAganNvbk9iamVjdEZyb20oXG4gKiAgICAgICBlYi5zZWxlY3RGcm9tKCdwZXQnKVxuICogICAgICAgICAuc2VsZWN0KFsncGV0LmlkIGFzIHBldF9pZCcsICdwZXQubmFtZSddKVxuICogICAgICAgICAud2hlcmVSZWYoJ3BldC5vd25lcl9pZCcsICc9JywgJ3BlcnNvbi5pZCcpXG4gKiAgICAgICAgIC53aGVyZSgncGV0LmlzX2Zhdm9yaXRlJywgJz0nLCB0cnVlKVxuICogICAgICkuYXMoJ2Zhdm9yaXRlX3BldCcpXG4gKiAgIF0pXG4gKiAgIC5leGVjdXRlKClcbiAqXG4gKiByZXN1bHRbMF0/LmlkXG4gKiByZXN1bHRbMF0/LmZhdm9yaXRlX3BldD8ucGV0X2lkXG4gKiByZXN1bHRbMF0/LmZhdm9yaXRlX3BldD8ubmFtZVxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBgaWRgLCAoXG4gKiAgIHNlbGVjdCBqc29uX29iamVjdChcbiAqICAgICAncGV0X2lkJywgYG9iamAuYHBldF9pZGAsXG4gKiAgICAgJ25hbWUnLCBgb2JqYC5gbmFtZWBcbiAqICAgKSBmcm9tIChcbiAqICAgICBzZWxlY3QgYHBldGAuYGlkYCBhcyBgcGV0X2lkYCwgYHBldGAuYG5hbWVgXG4gKiAgICAgZnJvbSBgcGV0YFxuICogICAgIHdoZXJlIGBwZXRgLmBvd25lcl9pZGAgPSBgcGVyc29uYC5gaWRgXG4gKiAgICAgYW5kIGBwZXRgLmBpc19mYXZvcml0ZWAgPSA/XG4gKiAgICkgYXMgb2JqXG4gKiApIGFzIGBmYXZvcml0ZV9wZXRgXG4gKiBmcm9tIGBwZXJzb25gXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25PYmplY3RGcm9tKGV4cHIpIHtcbiAgICByZXR1cm4gc3FsIGAoc2VsZWN0IGpzb25fb2JqZWN0KCR7c3FsLmpvaW4oZ2V0TXlzcWxKc29uT2JqZWN0QXJncyhleHByLnRvT3BlcmF0aW9uTm9kZSgpLCAnb2JqJykpfSkgZnJvbSAke2V4cHJ9IGFzIG9iailgO1xufVxuLyoqXG4gKiBUaGUgTXlTUUwgYGpzb25fb2JqZWN0YCBmdW5jdGlvbi5cbiAqXG4gKiBOT1RFOiBUaGlzIGhlbHBlciBpcyBvbmx5IGd1YXJhbnRlZWQgdG8gZnVsbHkgd29yayB3aXRoIHRoZSBidWlsdC1pbiBgTXlzcWxEaWFsZWN0YC5cbiAqIFdoaWxlIHRoZSBwcm9kdWNlZCBTUUwgaXMgY29tcGF0aWJsZSB3aXRoIGFsbCBNeVNRTCBkYXRhYmFzZXMsIHNvbWUgdGhpcmQtcGFydHkgZGlhbGVjdHNcbiAqIG1heSBub3QgcGFyc2UgdGhlIG5lc3RlZCBKU09OIGludG8gb2JqZWN0cy4gSW4gdGhlc2UgY2FzZXMgeW91IGNhbiB1c2UgdGhlIGJ1aWx0IGluXG4gKiBgUGFyc2VKU09OUmVzdWx0c1BsdWdpbmAgdG8gcGFyc2UgdGhlIHJlc3VsdHMuXG4gKlxuICogIyMjIEV4YW1wbGVzXG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICogICAuc2VsZWN0KChlYikgPT4gW1xuICogICAgICdpZCcsXG4gKiAgICAganNvbkJ1aWxkT2JqZWN0KHtcbiAqICAgICAgIGZpcnN0OiBlYi5yZWYoJ2ZpcnN0X25hbWUnKSxcbiAqICAgICAgIGxhc3Q6IGViLnJlZignbGFzdF9uYW1lJyksXG4gKiAgICAgICBmdWxsOiBlYi5mbignY29uY2F0JywgWydmaXJzdF9uYW1lJywgZWIudmFsKCcgJyksICdsYXN0X25hbWUnXSlcbiAqICAgICB9KS5hcygnbmFtZScpXG4gKiAgIF0pXG4gKiAgIC5leGVjdXRlKClcbiAqXG4gKiByZXN1bHRbMF0/LmlkXG4gKiByZXN1bHRbMF0/Lm5hbWUuZmlyc3RcbiAqIHJlc3VsdFswXT8ubmFtZS5sYXN0XG4gKiByZXN1bHRbMF0/Lm5hbWUuZnVsbFxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBcImlkXCIsIGpzb25fb2JqZWN0KFxuICogICAnZmlyc3QnLCBmaXJzdF9uYW1lLFxuICogICAnbGFzdCcsIGxhc3RfbmFtZSxcbiAqICAgJ2Z1bGwnLCBjb25jYXQoYGZpcnN0X25hbWVgLCA/LCBgbGFzdF9uYW1lYClcbiAqICkgYXMgXCJuYW1lXCJcbiAqIGZyb20gXCJwZXJzb25cIlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uQnVpbGRPYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIHNxbCBganNvbl9vYmplY3QoJHtzcWwuam9pbihPYmplY3Qua2V5cyhvYmopLmZsYXRNYXAoKGspID0+IFtzcWwubGl0KGspLCBvYmpba11dKSl9KWA7XG59XG5mdW5jdGlvbiBnZXRNeXNxbEpzb25PYmplY3RBcmdzKG5vZGUsIHRhYmxlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGdldEpzb25PYmplY3RBcmdzKG5vZGUsIHRhYmxlKTtcbiAgICB9XG4gICAgY2F0Y2gge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ015U1FMIGpzb25BcnJheUZyb20gYW5kIGpzb25PYmplY3RGcm9tIGZ1bmN0aW9ucyBjYW4gb25seSBoYW5kbGUgZXhwbGljaXQgc2VsZWN0aW9ucyBkdWUgdG8gbGltaXRhdGlvbnMgb2YgdGhlIGpzb25fb2JqZWN0IGZ1bmN0aW9uLiBzZWxlY3RBbGwoKSBpcyBub3QgYWxsb3dlZCBpbiB0aGUgc3VicXVlcnkuJyk7XG4gICAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7cVJBQUFBLElDQUFDLElDQUFDLElBRU8sSUFBTUMsRUFBbUYsQ0FDOUYsT0FBUSxDQUNOLE1BQU8sU0FDVCxFQUNBLE9BQVEsQ0FDTixNQUFPLFFBQ1QsRUFDQSxJQUFLLENBQ0gsTUFBTyxLQUNULEVBQ0EsS0FBTSxDQUNKLE1BQU8sUUFDVCxFQUNBLEtBQU0sQ0FDSixNQUFPLFFBQ1QsRUFDQSxjQUFlLENBQ2IsTUFBTyxRQUNULEVBQ0EsS0FBTSxDQUNKLE9BQVEsYUFDUixNQUFPLFVBQ1QsRUFDQSxTQUFVLENBQ1IsT0FBUSwwQkFDUixNQUFPLFVBQ1QsRUFDQSxJQUFLLENBQ0gsTUFBTyxTQUNULEVBQ0EsUUFBUyxDQUNQLE1BQU8sU0FDVCxFQUNBLE9BQVEsQ0FDTixNQUFPLFNBQ1QsRUFDQSxtQkFBb0IsQ0FDbEIsTUFBTyxTQUNULEVBQ0EsS0FBTSxDQUNKLE1BQU8sTUFDVCxFQUNBLE1BQU8sQ0FDTCxNQUFPLFNBQ1QsRUFDQSxNQUFPLENBQ0wsTUFBTyxTQUNULEVBQ0EsU0FBVSxDQUNSLE1BQU8sS0FDVCxFQUNBLG1CQUFvQixDQUNsQixNQUFPLEtBQ1QsRUFDQSxJQUFL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LENBQUNGLEdBQW1CLENBQUNDLEdBQWNKLEdBQWdCLEtBQzVFLEtBQU05QixFQUNOLFNBQUFtQyxFQUNBLFdBQVl6RCxFQUFPLEdBQ25CLE9BQUErQyxFQUNBLE1BQU9ELENBQ1QsQ0FDRixDQUNGLEVBQ0EsQ0FBQyxDQUNILEVBRUYsT0FBSUQsRUFBUUUsQ0FBTSxJQUFNLFNBQ3RCRixFQUFRRSxDQUFNLEVBQUksQ0FBRSxLQUFNQSxFQUFRLE9BQVEsQ0FBQyxDQUFFLEdBRy9DRixFQUFRRSxDQUFNLEVBQUUsT0FBT0QsQ0FBUyxFQUFJLENBQUUsUUFBU0UsRUFBZSxLQUFNRixFQUFXLE9BQUFDLENBQU8sRUFFL0U1QixDQUNULEVBQ0EsQ0FBRSxnQkFBQXdDLEdBQWlCLE1BQUFuRSxFQUFPLFFBQVMsQ0FBQyxFQUFHLFNBQUE0QyxDQUFTLENBQ2xELENBQ0YsQ0FFQSxJQUFNdUIsR0FBa0IsQ0FDdEIsSUFDQSxLQUNBLElBQ0EsS0FDQSxJQUNBLEtBQ0EsS0FDQSxTQUNBLE9BQ0EsVUFDRixFQUtPLFNBQVNDLElBQWlCLENBQy9CLElBQU0zQixFQUFTNEIsRUFBZ0IsRUFDekIsQ0FBQyxDQUFFLFNBQUF6QixDQUFTLENBQUMsRUFBSTBCLEdBQWtCLEVBR3pDLE9BQU96QixHQUFvQixDQUFFLE9BQUFKLEVBQVEsU0FBQUcsRUFBVSxNQUZqQyxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUssVUFBVyxDQUVLLENBQUMsQ0FjeEQsQ0FFQSxTQUFTckIsRUFBYUgsRUFBcUUsQ0FDekYsR0FBTSxDQUFDbUQsRUFBUUMsQ0FBTSxFQUFJcEQsRUFFekIsTUFBTyxDQUNMLFdBQVltRCxFQUFPLFdBQVcsT0FBT0MsRUFBTyxVQUFVLEVBQ3RELElBQUssR0FBR0QsRUFBTyxHQUFHO0FBQUEsRUFBTUMsRUFBTyxHQUFHLEVBQ3BDLENBQ0YiLAogICJuYW1lcyI6IFsiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiTVlTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJnZXRNeVNRTEJ1aWxkZXIiLCAicmVxdWlyZW1lbnRzIiwgImdldEJ1aWxkZXIiLCAiTXlzcWxBZGFwdGVyIiwgIk15c3FsUXVlcnlDb21waWxlciIsICJnZXREZWxldGVRdWVyeSIsICJkZXRhaWxzIiwgInJlcXVpcmVtZW50cyIsICJyb3dzIiwgImNvbHVtbnMiLCAidGFibGVOYW1lIiwgImJ1aWxkZXIiLCAiZ2V0TXlTUUxCdWlsZGVyIiwgImNvbXBpbGUiLCAiYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMiLCAiZ2V0SW5zZXJ0UXVlcnkiLCAiYXBwbHlUcmFuc2Zvcm1hdGlvbnMiLCAiZ2V0SW5zZXJ0UmVmZXRjaFF1ZXJ5IiwgImNyaXRlcmlhIiwgImdldEN1cnJlbnRUaW1lc3RhbXBNaWxsaXMiLCAiZ2V0VXBkYXRlUmVmZXRjaFF1ZXJ5IiwgImNoYW5nZXMiLCAicm93IiwgImdldFNlbGVjdFF1ZXJ5IiwgImZpbHRlciIsICJwYWdlSW5kZXgiLCAicGFnZVNpemUiLCAic29ydE9yZGVyIiwgImZpbHRlckV4cHJlc3Npb24iLCAiZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbiIsICJBR0dfTkFNRSIsICJDT1VOVF9SRUYiLCAiY291bnRRdWVyeSIsICJlYiIsICJzcWwiLCAiamIiLCAicWIiLCAiaXRlbSIsICJtb2NrU2VsZWN0UXVlcnkiLCAiZ2V0VXBkYXRlUXVlcnkiLCAic2NoZW1hIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImpzb25BcnJheUZyb20iLCAiZXhwciIsICJzcWwiLCAiZ2V0TXlzcWxKc29uT2JqZWN0QXJncyIsICJnZXRNeXNxbEpzb25PYmplY3RBcmdzIiwgIm5vZGUiLCAidGFibGUiLCAiZ2V0SnNvbk9iamVjdEFyZ3MiLCAiZ2V0VGFibGVzUXVlcnkiLCAicmVxdWlyZW1lbnRzIiwgImNvbXBpbGUiLCAiZ2V0TXlTUUxCdWlsZGVyIiwgInNxbCIsICJlYiIsICJqc29uQXJyYXlGcm9tIiwgImpiIiwgIm1vY2tUYWJsZXNRdWVyeSIsICJnZXRUaW1lem9uZVF1ZXJ5IiwgImJ1aWxkZXIiLCAic2Vzc2lvblR6IiwgIm1vY2tUaW1lem9uZVF1ZXJ5IiwgImNyZWF0ZU15U1FMQWRhcHRlciIsICJyZXF1aXJlbWVudHMiLCAiZXhlY3V0b3IiLCAib3RoZXJSZXF1aXJlbWVudHMiLCAiZGV0YWlscyIsICJvcHRpb25zIiwgInF1ZXJ5IiwgImdldERlbGV0ZVF1ZXJ5IiwgImVycm9yIiwgImNyZWF0ZUFkYXB0ZXJFcnJvciIsICJyb3dzIiwgInRhYmxlIiwgImNvbHVtbnMiLCAiYXV0b2luY3JlbWVudENvbHVtbiIsICJjb2x1bW4iLCAiZmlsdGVyT2JqZWN0cyIsICJyb3ciLCAiaW5mZXJGaWx0ZXJPYmplY3QiLCAiaGFzUGFydGlhbEZpbHRlck9iamVjdHMiLCAiZmlsdGVyT2JqZWN0IiwgImZpbHRlclZhbHVlcyIsICJ2YWx1ZSIsICJnZXRJbnNlcnRRdWVyeSIsICJpbnNlcnRRdWVyeSIsICJyZWZldGNoUXVlcnkiLCAiZ2V0SW5zZXJ0UmVmZXRjaFF1ZXJ5IiwgInNlcXVlbmNlIiwgImluc2VydEVycm9yIiwgIm1heWJlUmVmZXRjaFJlc3VsdCIsICJqb2luU2VxdWVuY2UiLCAicmVmZXRjaEVycm9yIiwgInJlZmV0Y2hSZXN1bHRzIiwgInJlc3VsdHMiLCAicmVzdWx0IiwgImF1dG9pbmNyZW1lbnRDb2x1bW5OYW1lIiwgImFjYyIsICJjb2x1bW5OYW1lIiwgInJlZmV0Y2hlZFJvdyIsICJpbnNlcnRlZFJvd3MiLCAiZXJyb3JzIiwgImkiLCAiaW5kZXgiLCAidGFibGVzUXVlcnkiLCAiZ2V0VGFibGVzUXVlcnkiLCAidGltZXpvbmVRdWVyeSIsICJnZXRUaW1lem9uZVF1ZXJ5IiwgInRhYmxlc0Vycm9yIiwgInRhYmxlcyIsICJ0aW1lem9uZUVycm9yIiwgInRpbWV6b25lcyIsICJ0aW1lem9uZSIsICJjcmVhdGVJbnRyb3NwZWN0aW9uIiwgImdldFNlbGVjdFF1ZXJ5IiwgInVwZGF0ZVF1ZXJ5IiwgImdldFVwZGF0ZVF1ZXJ5IiwgImdldFVwZGF0ZVJlZmV0Y2hRdWVyeSIsICJ1cGRhdGVFcnJvciIsICJyZWZldGNoUmVzdWx0IiwgImFyZ3MiLCAic2NoZW1hcyIsICJ0YWJsZU5hbWUiLCAic2NoZW1hIiwgImNvbHVtbnNSZWNvcmQiLCAiYSIsICJiIiwgImRhdGF0eXBlIiwgImRlZmF1bHRWYWx1ZSIsICJpbmRleE9mUGFyZW50aGVzaXMiLCAic3RyaXBwZWREYXRhVHlwZSIsICJpc0F1dG9pbmNyZW1lbnQiLCAiaXNDb21wdXRlZCIsICJudWxsYWJsZSIsICJNWVNRTF9EQVRBX1RZUEVTX1RPX01FVEFEQVRBIiwgImZpbHRlck9wZXJhdG9ycyIsICJtb2NrSW50cm9zcGVjdCIsICJtb2NrVGFibGVzUXVlcnkiLCAibW9ja1RpbWV6b25lUXVlcnkiLCAicXVlcnkwIiwgInF1ZXJ5MSJdCn0K
|
|
9
|
+
import"../../chunk-WEUE32ZL.js";import{a as oe}from"../../chunk-6MJRFEB4.js";import{a as l}from"../../chunk-V6YDTHJJ.js";import{A as S,B as F,C as q,D as z,q as A,v as j,w as P,x as Y,z as k}from"../../chunk-UHDZB3FI.js";import{e as _}from"../../chunk-GGFIWHFO.js";_();_();_();var $={bigint:{group:"numeric"},binary:{group:"string"},bit:{group:"raw"},blob:{group:"string"},char:{group:"string"},"char binary":{group:"string"},date:{format:"YYYY-MM-DD",group:"datetime"},datetime:{format:"YYYY-MM-DD HH:mm:ss.SSS",group:"datetime"},dec:{group:"numeric"},decimal:{group:"numeric"},double:{group:"numeric"},"double precision":{group:"numeric"},enum:{group:"enum"},fixed:{group:"numeric"},float:{group:"numeric"},geometry:{group:"raw"},geometrycollection:{group:"raw"},int:{group:"numeric"},integer:{group:"numeric"},json:{group:"json"},linestring:{group:"raw"},long:{group:"string"},"long varchar":{group:"string"},longblob:{group:"string"},longtext:{group:"string"},longvarbinary:{group:"string"},longvarchar:{group:"string"},mediumblob:{group:"string"},mediumint:{group:"numeric"},mediumtext:{group:"string"},multilinestring:{group:"raw"},multipoint:{group:"raw"},multipolygon:{group:"raw"},numeric:{group:"numeric"},point:{group:"raw"},polygon:{group:"raw"},real:{group:"numeric"},set:{group:"raw"},smallint:{group:"numeric"},text:{group:"string"},time:{format:"HH:mm:ss.SSS",group:"time"},timestamp:{format:"YYYY-MM-DD HH:mm:ss.SSS",group:"datetime"},tinyblob:{group:"string"},tinyint:{group:"numeric"},tinytext:{group:"string"},varbinary:{group:"string"},varchar:{group:"string"},"varchar binary":{group:"string"},vector:{group:"raw"},year:{format:"YYYY",group:"numeric"}};_();_();function b(n){return Y({...n,Adapter:P,QueryCompiler:j})}function v(n,r){let{rows:o,table:{columns:u,name:e}}=n,t=b(r);return k(t.deleteFrom(e).$call(S(o,u)).$castTo())}function Q(n,r){let{rows:o,table:{columns:u,name:e}}=n,t=b(r);return k(t.insertInto(e).values(q({columns:u,context:"insert",supportsDefaultKeyword:!0,values:o})).$castTo())}function I(n,r){let{criteria:o,table:{columns:u,name:e}}=n,t=b(r);return k(t.selectFrom(e).$call(S(o,u)).select(Object.keys(u)).select(V().as("__ps_inserted_at__")))}function G(n,r){let{changes:o,row:u,table:{columns:e,name:t}}=n,a=b(r);return k(a.selectFrom(t).$call(S([{...u,...o}],e)).select(Object.keys(e)).select(V().as("__ps_updated_at__")))}function H(n,r){let{filter:o={after:"and",filters:[],kind:"FilterGroup"},pageIndex:u,pageSize:e,sortOrder:t,table:{columns:a,name:m}}=n,f=b(r),c=z(o.filters,a),E="__ps_agg__",g="__ps_count__",y=f.selectFrom(m).where(c).select(i=>i.cast(i.fn.coalesce(i.fn.countAll(),A.lit(0)),"char").as(g));return k(f.with(E,()=>y).selectFrom(m).innerJoin(E,i=>i.onTrue()).where(c).select(`${E}.${g}`).select(Object.keys(a)).$call(i=>t.reduce((T,s)=>T.orderBy(s.column,s.direction),i)).limit(e).offset(A.lit(BigInt(u)*BigInt(e))))}function fe(){return[{id:1,created_at:new Date("2025-01-27T00:00:00.000Z"),deleted_at:null,role:"admin",name:"Alice",name_role:"Alice_admin",__ps_count__:"2"},{id:2,created_at:new Date("2025-01-26T23:00:00.000Z"),deleted_at:null,role:"member",name:"Bob",name_role:"Bob_member",__ps_count__:"2"}]}function K(n,r){let{changes:o,row:u,table:{columns:e,name:t,schema:a}}=n,m=b(r);return k(m.withSchema(a).updateTable(t).set(q({columns:e,context:"update",supportsDefaultKeyword:!0,values:o})).$call(S([u],e)).$castTo())}function V(){return A`cast(unix_timestamp(now(3)) * 1000 as unsigned)`}_();_();function J(n){return A`json_object(${A.join(Object.keys(n).flatMap(r=>[A.lit(r),n[r]]))})`}function W(n){let r=A`database()`,u=b(n).selectFrom("information_schema.columns as c").leftJoin("information_schema.KEY_COLUMN_USAGE as kcu",e=>e.on("kcu.TABLE_SCHEMA","=",r).onRef("kcu.TABLE_NAME","=","c.TABLE_NAME").onRef("kcu.COLUMN_NAME","=","c.COLUMN_NAME").on("kcu.POSITION_IN_UNIQUE_CONSTRAINT","is not",null)).leftJoin("information_schema.KEY_COLUMN_USAGE as pk_kcu",e=>e.on("pk_kcu.TABLE_SCHEMA","=",r).onRef("pk_kcu.TABLE_NAME","=","c.TABLE_NAME").onRef("pk_kcu.COLUMN_NAME","=","c.COLUMN_NAME").on("pk_kcu.CONSTRAINT_NAME","=","PRIMARY")).where("c.TABLE_SCHEMA","=",r).select(["c.COLUMN_DEFAULT as default","c.COLUMN_NAME as name","c.COLUMN_TYPE as datatype","c.ORDINAL_POSITION as position","c.TABLE_NAME","kcu.REFERENCED_TABLE_NAME as fk_table","kcu.REFERENCED_COLUMN_NAME as fk_column","pk_kcu.ORDINAL_POSITION as pk"]).select(e=>[e("c.EXTRA","=","auto_increment").as("autoincrement"),e("c.EXTRA","in",["on update CURRENT_TIMESTAMP","STORED GENERATED","VIRTUAL GENERATED"]).as("computed"),e("c.IS_NULLABLE","=","YES").as("nullable")]);return k(b(n).with("cols",()=>u).selectFrom("information_schema.tables as t").innerJoin("cols as c",e=>e.onRef("c.TABLE_NAME","=","t.TABLE_NAME")).where("t.TABLE_SCHEMA","=",r).where("t.TABLE_TYPE","in",["BASE TABLE","VIEW"]).groupBy([r,"t.TABLE_NAME","t.TABLE_TYPE"]).select([r.as("schema"),"t.TABLE_NAME as name","t.TABLE_TYPE as type"]).$narrowType().select(e=>e.fn("json_arrayagg",[J({autoincrement:e.ref("c.autoincrement"),computed:e.ref("c.computed"),datatype:e.ref("c.datatype"),default:e.ref("c.default"),fk_column:e.ref("c.fk_column"),fk_table:e.ref("c.fk_table"),name:e.ref("c.name"),position:e.ref("c.position"),pk:e.ref("c.pk"),nullable:e.ref("c.nullable")})]).as("columns")).orderBy("t.TABLE_SCHEMA").orderBy("t.TABLE_NAME").orderBy("t.TABLE_TYPE"))}function X(){return[{columns:[{autoincrement:1,computed:0,datatype:"int",default:null,fk_column:null,fk_table:null,name:"id",nullable:0,pk:1,position:1},{autoincrement:0,computed:0,datatype:"binary(16)",default:"uuid_to_bin(uuid())",fk_column:null,fk_table:null,name:"uuid",nullable:1,pk:null,position:2},{autoincrement:0,computed:0,datatype:"varchar(255)",default:null,fk_column:null,fk_table:null,name:"name",nullable:1,pk:null,position:3},{autoincrement:0,computed:1,datatype:"text",default:null,fk_column:null,fk_table:null,name:"id_name",nullable:1,pk:null,position:4}],name:"animals",schema:"studio",type:"BASE TABLE"},{columns:[{autoincrement:0,computed:0,datatype:"char(36)",default:"uuid()",fk_column:null,fk_table:null,name:"id",nullable:0,pk:1,position:1},{autoincrement:0,computed:0,datatype:"text",default:null,fk_column:null,fk_table:null,name:"name",nullable:0,pk:2,position:2},{autoincrement:0,computed:0,datatype:"timestamp",default:"CURRENT_TIMESTAMP",fk_column:null,fk_table:null,name:"created_at",nullable:1,pk:null,position:3}],name:"composite_pk",schema:"studio",type:"BASE TABLE"},{columns:[{autoincrement:1,computed:0,datatype:"int",default:null,fk_column:null,fk_table:null,name:"id",nullable:0,pk:1,position:1},{autoincrement:0,computed:0,datatype:"timestamp",default:"current_timestamp",fk_column:null,fk_table:null,name:"created_at",nullable:1,pk:null,position:2},{autoincrement:0,computed:0,datatype:"timestamp",default:null,fk_column:null,fk_table:null,name:"deleted_at",nullable:1,pk:null,position:3},{autoincrement:0,computed:0,datatype:"text",default:null,fk_column:null,fk_table:null,name:"role",nullable:1,pk:null,position:4},{autoincrement:0,computed:0,datatype:"text",default:null,fk_column:null,fk_table:null,name:"name",nullable:1,pk:null,position:5},{autoincrement:0,computed:1,datatype:"text",default:null,fk_column:null,fk_table:null,name:"name_role",nullable:1,pk:null,position:6}],name:"users",schema:"studio",type:"BASE TABLE"}]}function Z(n){let r=b(n),o=A`@@session.time_zone`;return k(r.selectNoFrom(r.case().when(o,"=","SYSTEM").then(A`@@system_time_zone`).else(o).end().as("timezone")).$narrowType())}function ee(){return[{timezone:"UTC"}]}function Le(n){let{executor:r,...o}=n;return{async delete(u,e){try{let t=v(u,o),[a]=await r.execute(t,e);return a?l({error:a,query:t}):[null,{...u,query:t}]}catch(t){return l({error:t})}},async insert(u,e){try{let{rows:t,table:a}=u,{columns:m}=a,f=Object.values(m).find(s=>s.isAutoincrement),c=t.map(s=>F(s,m)),E=c.some(s=>{let p=Object.values(s);return p.length===0||p.some(d=>d==null)});if(!f&&E)return l({error:new Error("Cannot proceed with the insertion, some rows cannot be refetched after insertion."),query:Q(u,o)});if(!E){let s=Q(u,o),p=I({criteria:c,table:a},o),d=[s,p],[[h],N]=await r.executeSequence(d,e),R=L(d);if(h)return l({error:h,query:R});let[M,O]=N;return M?l({error:new Error("Failed to refetch inserted rows - please refresh.",{cause:M}),query:R}):[null,{rows:O,query:R}]}let g=await Promise.all(t.map(async s=>{let p=Q({rows:[s],table:a},o),[d,h]=await r.execute(p,e);if(d)return l({error:d,query:p});let{name:N}=f,R=s[N]||h[0]?.insertId;if(!R)return l({error:new Error("Could not determine value for autoincrement column to refetch inserted row."),query:p});let M=I({criteria:[{[N]:R}],table:{...a,columns:Object.values(m).reduce((x,D)=>{let{name:U}=D;return x[U]={...D,pkPosition:U===N?1:null},x},{})}},o),[O,re]=await r.execute(M,e),B=L([p,M]);if(O)return console.error("Error refetching inserted row:",O),l({error:new Error("Failed to refetch inserted row - please refresh.",{cause:O}),query:B});let[C]=re;return C?[null,{row:C,query:B}]:l({error:new Error("Refetch query returned no results for inserted row."),query:B})})),y=[],i=null,T=[];for(let s=0;s<g.length;s++){let[p,d]=g[s];p?(T.push([s,p]),p.query&&(i=i?L([i,p.query]):p.query)):(y.push(d.row),d.query&&(i=i?L([i,d.query]):d.query))}return T.length>0?l({error:new AggregateError(T.map(([,s])=>s),`Row${T.length>1?"s":""} ${T.map(([s])=>s).join(", ")} could not be inserted or refetched.`),query:i}):[null,{rows:y,query:i}]}catch(t){return l({error:t})}},async introspect(u){try{let e=W(n),t=Z(n),[[a,m],[f,c]]=await Promise.all([r.execute(e,u),r.execute(t,u)]);if(a)return l({error:a,query:e});if(f)return l({error:f,query:t});let E=c[0]?.timezone;return E?[null,te({query:e,tables:m,timezone:E})]:l({error:new Error("Timezone not found"),query:t})}catch(e){return l({error:e})}},async query(u,e){try{let t=H(u,o),[a,m]=await r.execute(t,e);return a?l({error:a,query:t}):[null,{filteredRowCount:m[0]?.__ps_count__||"0",rows:m,query:t}]}catch(t){return l({error:t})}},async update(u,e){try{let t=K(u,o),a=G(u,o),[[m],f]=await r.executeSequence([t,a],e);if(m)return l({error:m,query:t});let[c,E]=f;if(c)return l({error:c,query:t});let[g]=E;return g?[null,{row:g,query:t}]:l({error:new Error("Updated row not found"),query:t})}catch(t){return l({error:t})}}}}function te(n){let{query:r,tables:o,timezone:u}=n;return o.reduce((e,t)=>{let{schemas:a}=e,{columns:m,name:f,schema:c}=t,E=m.sort((g,y)=>g.position-y.position).reduce((g,y)=>{let{datatype:i,default:T,name:s}=y,p=i.indexOf("("),d=(p>-1?i.substring(0,p):i).trim().toLowerCase(),h=!!y.autoincrement,N=!!y.computed,R=!!y.nullable;return{...g,[s]:{datatype:{...$[d]||{group:"raw"},isArray:!1,isNative:!0,name:d,options:d==="enum"?i.slice(6,-2).split("','"):[],schema:c},defaultValue:T,fkColumn:y.fk_column,fkSchema:c,fkTable:y.fk_table,isAutoincrement:h,isComputed:N,isRequired:!R&&!h&&!N&&T==null,name:s,nullable:R,pkPosition:y.pk,schema:c,table:f}}},{});return a[c]===void 0&&(a[c]={name:c,tables:{}}),a[c].tables[f]={columns:E,name:f,schema:c},e},{filterOperators:ne,query:r,schemas:{},timezone:u})}var ne=["=","!=",">",">=","<","<=","is","is not","like","not like"];function Be(){let n=X(),[{timezone:r}]=ee();return te({tables:n,timezone:r,query:{parameters:[],sql:"<mocked>"}})}function L(n){let[r,o]=n;return{parameters:r.parameters.concat(o.parameters),sql:`${r.sql};
|
|
10
|
+
${o.sql}`}}export{Le as createMySQLAdapter,oe as getCancelQuery,v as getDeleteQuery,Q as getInsertQuery,I as getInsertRefetchQuery,H as getSelectQuery,W as getTablesQuery,Z as getTimezoneQuery,K as getUpdateQuery,G as getUpdateRefetchQuery,Be as mockIntrospect,fe as mockSelectQuery,X as mockTablesQuery,ee as mockTimezoneQuery};
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vZGF0YS9teXNxbC1jb3JlL2luZGV4LnRzIiwgIi4uLy4uLy4uL2RhdGEvbXlzcWwtY29yZS9hZGFwdGVyLnRzIiwgIi4uLy4uLy4uL2RhdGEvbXlzcWwtY29yZS9kYXRhdHlwZS50cyIsICIuLi8uLi8uLi9kYXRhL215c3FsLWNvcmUvZG1sLnRzIiwgIi4uLy4uLy4uL2RhdGEvbXlzcWwtY29yZS9idWlsZGVyLnRzIiwgIi4uLy4uLy4uL2RhdGEvbXlzcWwtY29yZS9pbnRyb3NwZWN0aW9uLnRzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vaGVscGVycy9teXNxbC5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0ICogZnJvbSBcIi4vYWRhcHRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZG1sXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pbnRyb3NwZWN0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsaXR5XCI7XG4iLCAiaW1wb3J0IHtcbiAgdHlwZSBBZGFwdGVyLFxuICB0eXBlIEFkYXB0ZXJEZWxldGVSZXN1bHQsXG4gIHR5cGUgQWRhcHRlckVycm9yLFxuICB0eXBlIEFkYXB0ZXJJbnNlcnRSZXN1bHQsXG4gIHR5cGUgQWRhcHRlckludHJvc3BlY3RSZXN1bHQsXG4gIHR5cGUgQWRhcHRlclF1ZXJ5UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJSZXF1aXJlbWVudHMsXG4gIHR5cGUgQWRhcHRlclVwZGF0ZVJlc3VsdCxcbiAgdHlwZSBDb2x1bW4sXG4gIGNyZWF0ZUFkYXB0ZXJFcnJvcixcbiAgdHlwZSBGaWx0ZXJPcGVyYXRvcixcbiAgdHlwZSBUYWJsZSxcbn0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgU2VxdWVuY2VFeGVjdXRvciB9IGZyb20gXCIuLi9leGVjdXRvclwiO1xuaW1wb3J0IHsgaW5mZXJGaWx0ZXJPYmplY3QsIHR5cGUgUXVlcnksIHR5cGUgUXVlcnlSZXN1bHQgfSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB0eXBlIHsgRWl0aGVyIH0gZnJvbSBcIi4uL3R5cGUtdXRpbHNcIjtcbmltcG9ydCB7IE1ZU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEEgfSBmcm9tIFwiLi9kYXRhdHlwZVwiO1xuaW1wb3J0IHtcbiAgZ2V0RGVsZXRlUXVlcnksXG4gIGdldEluc2VydFF1ZXJ5LFxuICBnZXRJbnNlcnRSZWZldGNoUXVlcnksXG4gIGdldFNlbGVjdFF1ZXJ5LFxuICBnZXRVcGRhdGVRdWVyeSxcbiAgZ2V0VXBkYXRlUmVmZXRjaFF1ZXJ5LFxufSBmcm9tIFwiLi9kbWxcIjtcbmltcG9ydCB7IGdldFRhYmxlc1F1ZXJ5LCBnZXRUaW1lem9uZVF1ZXJ5LCBtb2NrVGFibGVzUXVlcnksIG1vY2tUaW1lem9uZVF1ZXJ5IH0gZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuXG5leHBvcnQgdHlwZSBNeVNRTEFkYXB0ZXJSZXF1aXJlbWVudHMgPSBPbWl0PEFkYXB0ZXJSZXF1aXJlbWVudHMsIFwiZXhlY3V0b3JcIj4gJiB7XG4gIGV4ZWN1dG9yOiBTZXF1ZW5jZUV4ZWN1dG9yO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU15U1FMQWRhcHRlcihyZXF1aXJlbWVudHM6IE15U1FMQWRhcHRlclJlcXVpcmVtZW50cyk6IEFkYXB0ZXIge1xuICBjb25zdCB7IGV4ZWN1dG9yLCAuLi5vdGhlclJlcXVpcmVtZW50cyB9ID0gcmVxdWlyZW1lbnRzO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgZGVsZXRlKGRldGFpbHMsIG9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJEZWxldGVSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldERlbGV0ZVF1ZXJ5KGRldGFpbHMsIG90aGVyUmVxdWlyZW1lbnRzKTtcblxuICAgICAgICBjb25zdCBbZXJyb3JdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZShxdWVyeSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyAuLi5kZXRhaWxzLCBxdWVyeSB9XTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGluc2VydChkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW5zZXJ0UmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyByb3dzLCB0YWJsZSB9ID0gZGV0YWlscztcbiAgICAgICAgY29uc3QgeyBjb2x1bW5zIH0gPSB0YWJsZTtcblxuICAgICAgICBjb25zdCBhdXRvaW5jcmVtZW50Q29sdW1uOiBDb2x1bW4gfCB1bmRlZmluZWQgPSBPYmplY3QudmFsdWVzKGNvbHVtbnMpLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLmlzQXV0b2luY3JlbWVudCk7XG5cbiAgICAgICAgY29uc3QgZmlsdGVyT2JqZWN0cyA9IHJvd3MubWFwKChyb3cpID0+IGluZmVyRmlsdGVyT2JqZWN0KHJvdywgY29sdW1ucykpO1xuXG4gICAgICAgIGNvbnN0IGhhc1BhcnRpYWxGaWx0ZXJPYmplY3RzID0gZmlsdGVyT2JqZWN0cy5zb21lKChmaWx0ZXJPYmplY3QpID0+IHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJWYWx1ZXMgPSBPYmplY3QudmFsdWVzKGZpbHRlck9iamVjdCk7XG5cbiAgICAgICAgICByZXR1cm4gZmlsdGVyVmFsdWVzLmxlbmd0aCA9PT0gMCB8fCBmaWx0ZXJWYWx1ZXMuc29tZSgodmFsdWUpID0+IHZhbHVlID09IG51bGwpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgY2xhc3NpYyBwYXJ0aWFsIGZpbHRlciBvYmplY3QgY2FzZXMgKGUuZy4gdXVpZCkgaGVyZSBvciBiZWZvcmUgcmVxdWVzdGluZyBmcm9tIGFkYXB0ZXIuXG4gICAgICAgIGlmICghYXV0b2luY3JlbWVudENvbHVtbiAmJiBoYXNQYXJ0aWFsRmlsdGVyT2JqZWN0cykge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3Ioe1xuICAgICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcihcIkNhbm5vdCBwcm9jZWVkIHdpdGggdGhlIGluc2VydGlvbiwgc29tZSByb3dzIGNhbm5vdCBiZSByZWZldGNoZWQgYWZ0ZXIgaW5zZXJ0aW9uLlwiKSxcbiAgICAgICAgICAgIHF1ZXJ5OiBnZXRJbnNlcnRRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWhhc1BhcnRpYWxGaWx0ZXJPYmplY3RzKSB7XG4gICAgICAgICAgY29uc3QgaW5zZXJ0UXVlcnkgPSBnZXRJbnNlcnRRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG4gICAgICAgICAgY29uc3QgcmVmZXRjaFF1ZXJ5ID0gZ2V0SW5zZXJ0UmVmZXRjaFF1ZXJ5KHsgY3JpdGVyaWE6IGZpbHRlck9iamVjdHMsIHRhYmxlIH0sIG90aGVyUmVxdWlyZW1lbnRzKTtcbiAgICAgICAgICBjb25zdCBzZXF1ZW5jZSA9IFtpbnNlcnRRdWVyeSwgcmVmZXRjaFF1ZXJ5XSBhcyBjb25zdDtcblxuICAgICAgICAgIGNvbnN0IFtbaW5zZXJ0RXJyb3JdLCBtYXliZVJlZmV0Y2hSZXN1bHRdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZVNlcXVlbmNlKHNlcXVlbmNlLCBvcHRpb25zKTtcblxuICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gam9pblNlcXVlbmNlKHNlcXVlbmNlKTtcblxuICAgICAgICAgIGlmIChpbnNlcnRFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBpbnNlcnRFcnJvciwgcXVlcnkgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgW3JlZmV0Y2hFcnJvciwgcmVmZXRjaFJlc3VsdHNdID0gbWF5YmVSZWZldGNoUmVzdWx0ITtcblxuICAgICAgICAgIGlmIChyZWZldGNoRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3Ioe1xuICAgICAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJlZmV0Y2ggaW5zZXJ0ZWQgcm93cyAtIHBsZWFzZSByZWZyZXNoLlwiLCB7IGNhdXNlOiByZWZldGNoRXJyb3IgfSksXG4gICAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIFtudWxsLCB7IHJvd3M6IHJlZmV0Y2hSZXN1bHRzLCBxdWVyeSB9XTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhcyBhdXRvaW5jcmVtZW50IGNvbHVtbiAtIGluc2VydCByb3dzIG9uZSBieSBvbmUgYW5kIHJlZmV0Y2gsIHRha2luZyBhZHZhbnRhZ2Ugb2YgYGluc2VydElkYCBpZiBpbnNlcnRlZCByb3cgaGFzIG5vIHZhbHVlIGZvciB0aGlzIGNvbHVtbi5cbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIHJvd3MubWFwKGFzeW5jIChyb3cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluc2VydFF1ZXJ5ID0gZ2V0SW5zZXJ0UXVlcnkoeyByb3dzOiBbcm93XSwgdGFibGUgfSwgb3RoZXJSZXF1aXJlbWVudHMpO1xuXG4gICAgICAgICAgICBjb25zdCBbZXJyb3IsIHJlc3VsdF0gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKGluc2VydFF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnk6IGluc2VydFF1ZXJ5IH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB7IG5hbWU6IGF1dG9pbmNyZW1lbnRDb2x1bW5OYW1lIH0gPSBhdXRvaW5jcmVtZW50Q29sdW1uITtcblxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByb3dbYXV0b2luY3JlbWVudENvbHVtbk5hbWVdIHx8IHJlc3VsdFswXT8uaW5zZXJ0SWQ7XG5cbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7XG4gICAgICAgICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBkZXRlcm1pbmUgdmFsdWUgZm9yIGF1dG9pbmNyZW1lbnQgY29sdW1uIHRvIHJlZmV0Y2ggaW5zZXJ0ZWQgcm93LlwiKSxcbiAgICAgICAgICAgICAgICBxdWVyeTogaW5zZXJ0UXVlcnksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByZWZldGNoUXVlcnkgPSBnZXRJbnNlcnRSZWZldGNoUXVlcnkoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjcml0ZXJpYTogW3sgW2F1dG9pbmNyZW1lbnRDb2x1bW5OYW1lXTogdmFsdWUgfV0sXG4gICAgICAgICAgICAgICAgdGFibGU6IHtcbiAgICAgICAgICAgICAgICAgIC4uLnRhYmxlLFxuICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGRpcnR5IGhhY2sgdG8gbWFyayBhdXRvaW5jcmVtZW50IGNvbHVtbiBhcyBUSEUgcHJpbWFyeSBrZXkgZm9yIHJlZmV0Y2hpbmcuXG4gICAgICAgICAgICAgICAgICBjb2x1bW5zOiBPYmplY3QudmFsdWVzKGNvbHVtbnMpLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgKGFjYywgY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBuYW1lOiBjb2x1bW5OYW1lIH0gPSBjb2x1bW47XG5cbiAgICAgICAgICAgICAgICAgICAgICBhY2NbY29sdW1uTmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBwa1Bvc2l0aW9uOiBjb2x1bW5OYW1lID09PSBhdXRvaW5jcmVtZW50Q29sdW1uTmFtZSA/IDEgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7fSBhcyBUYWJsZVtcImNvbHVtbnNcIl0sXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG90aGVyUmVxdWlyZW1lbnRzLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgW3JlZmV0Y2hFcnJvciwgcmVmZXRjaFJlc3VsdHNdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZShyZWZldGNoUXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgICAgICBjb25zdCBxdWVyeSA9IGpvaW5TZXF1ZW5jZShbaW5zZXJ0UXVlcnksIHJlZmV0Y2hRdWVyeV0pO1xuXG4gICAgICAgICAgICBpZiAocmVmZXRjaEVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciByZWZldGNoaW5nIGluc2VydGVkIHJvdzpcIiwgcmVmZXRjaEVycm9yKTtcblxuICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHtcbiAgICAgICAgICAgICAgICBlcnJvcjogbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJlZmV0Y2ggaW5zZXJ0ZWQgcm93IC0gcGxlYXNlIHJlZnJlc2guXCIsIHsgY2F1c2U6IHJlZmV0Y2hFcnJvciB9KSxcbiAgICAgICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IFtyZWZldGNoZWRSb3ddID0gcmVmZXRjaFJlc3VsdHM7XG5cbiAgICAgICAgICAgIGlmICghcmVmZXRjaGVkUm93KSB7XG4gICAgICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3Ioe1xuICAgICAgICAgICAgICAgIGVycm9yOiBuZXcgRXJyb3IoXCJSZWZldGNoIHF1ZXJ5IHJldHVybmVkIG5vIHJlc3VsdHMgZm9yIGluc2VydGVkIHJvdy5cIiksXG4gICAgICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gW251bGwsIHsgcm93OiByZWZldGNoZWRSb3csIHF1ZXJ5IH1dIGFzIGNvbnN0O1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGluc2VydGVkUm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSA9IFtdO1xuICAgICAgICBsZXQgcXVlcnk6IFF1ZXJ5PHVua25vd24+IHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGNvbnN0IGVycm9yczogW251bWJlciwgQWRhcHRlckVycm9yXVtdID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgW2Vycm9yLCByZXN1bHRdID0gcmVzdWx0c1tpXSE7XG5cbiAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKFtpLCBlcnJvcl0pO1xuXG4gICAgICAgICAgICBpZiAoZXJyb3IucXVlcnkpIHtcbiAgICAgICAgICAgICAgcXVlcnkgPSAhcXVlcnkgPyBlcnJvci5xdWVyeSA6IGpvaW5TZXF1ZW5jZShbcXVlcnksIGVycm9yLnF1ZXJ5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluc2VydGVkUm93cy5wdXNoKHJlc3VsdC5yb3cpO1xuXG4gICAgICAgICAgICBpZiAocmVzdWx0LnF1ZXJ5KSB7XG4gICAgICAgICAgICAgIHF1ZXJ5ID0gIXF1ZXJ5ID8gcmVzdWx0LnF1ZXJ5IDogam9pblNlcXVlbmNlKFtxdWVyeSwgcmVzdWx0LnF1ZXJ5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7XG4gICAgICAgICAgICBlcnJvcjogbmV3IEFnZ3JlZ2F0ZUVycm9yKFxuICAgICAgICAgICAgICBlcnJvcnMubWFwKChbLCBlcnJvcl0pID0+IGVycm9yKSxcbiAgICAgICAgICAgICAgYFJvdyR7ZXJyb3JzLmxlbmd0aCA+IDEgPyBcInNcIiA6IFwiXCJ9ICR7ZXJyb3JzLm1hcCgoW2luZGV4XSkgPT4gaW5kZXgpLmpvaW4oXCIsIFwiKX0gY291bGQgbm90IGJlIGluc2VydGVkIG9yIHJlZmV0Y2hlZC5gLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHF1ZXJ5OiBxdWVyeSEsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgcm93czogaW5zZXJ0ZWRSb3dzLCBxdWVyeTogcXVlcnkhIH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgaW50cm9zcGVjdChvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW50cm9zcGVjdFJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRhYmxlc1F1ZXJ5ID0gZ2V0VGFibGVzUXVlcnkocmVxdWlyZW1lbnRzKTtcbiAgICAgICAgY29uc3QgdGltZXpvbmVRdWVyeSA9IGdldFRpbWV6b25lUXVlcnkocmVxdWlyZW1lbnRzKTtcblxuICAgICAgICBjb25zdCBbW3RhYmxlc0Vycm9yLCB0YWJsZXNdLCBbdGltZXpvbmVFcnJvciwgdGltZXpvbmVzXV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgZXhlY3V0b3IuZXhlY3V0ZSh0YWJsZXNRdWVyeSwgb3B0aW9ucyksXG4gICAgICAgICAgZXhlY3V0b3IuZXhlY3V0ZSh0aW1lem9uZVF1ZXJ5LCBvcHRpb25zKSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgaWYgKHRhYmxlc0Vycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiB0YWJsZXNFcnJvciwgcXVlcnk6IHRhYmxlc1F1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbWV6b25lRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IHRpbWV6b25lRXJyb3IsIHF1ZXJ5OiB0aW1lem9uZVF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGltZXpvbmUgPSB0aW1lem9uZXNbMF0/LnRpbWV6b25lO1xuXG4gICAgICAgIGlmICghdGltZXpvbmUpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IG5ldyBFcnJvcihcIlRpbWV6b25lIG5vdCBmb3VuZFwiKSwgcXVlcnk6IHRpbWV6b25lUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIGNyZWF0ZUludHJvc3BlY3Rpb24oeyBxdWVyeTogdGFibGVzUXVlcnksIHRhYmxlcywgdGltZXpvbmUgfSldO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgcXVlcnkoZGV0YWlscywgb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlclF1ZXJ5UmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXRTZWxlY3RRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG5cbiAgICAgICAgY29uc3QgW2Vycm9yLCByZXN1bHRzXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgZmlsdGVyZWRSb3dDb3VudDogcmVzdWx0c1swXT8uX19wc19jb3VudF9fIHx8IFwiMFwiLCByb3dzOiByZXN1bHRzLCBxdWVyeSB9XTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHVwZGF0ZShkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyVXBkYXRlUmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdXBkYXRlUXVlcnkgPSBnZXRVcGRhdGVRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG4gICAgICAgIGNvbnN0IHJlZmV0Y2hRdWVyeSA9IGdldFVwZGF0ZVJlZmV0Y2hRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG5cbiAgICAgICAgY29uc3QgW1t1cGRhdGVFcnJvcl0sIHJlZmV0Y2hSZXN1bHRdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZVNlcXVlbmNlKFt1cGRhdGVRdWVyeSwgcmVmZXRjaFF1ZXJ5XSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKHVwZGF0ZUVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiB1cGRhdGVFcnJvciwgcXVlcnk6IHVwZGF0ZVF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgW3JlZmV0Y2hFcnJvciwgcmVzdWx0c10gPSByZWZldGNoUmVzdWx0ITtcblxuICAgICAgICBpZiAocmVmZXRjaEVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiByZWZldGNoRXJyb3IsIHF1ZXJ5OiB1cGRhdGVRdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IFtyb3ddID0gcmVzdWx0cztcblxuICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogbmV3IEVycm9yKFwiVXBkYXRlZCByb3cgbm90IGZvdW5kXCIpLCBxdWVyeTogdXBkYXRlUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgcm93LCBxdWVyeTogdXBkYXRlUXVlcnkgfV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUludHJvc3BlY3Rpb24oYXJnczoge1xuICBxdWVyeTogUXVlcnk7XG4gIHRhYmxlczogUXVlcnlSZXN1bHQ8dHlwZW9mIGdldFRhYmxlc1F1ZXJ5PjtcbiAgdGltZXpvbmU6IHN0cmluZztcbn0pOiBBZGFwdGVySW50cm9zcGVjdFJlc3VsdCB7XG4gIGNvbnN0IHsgcXVlcnksIHRhYmxlcywgdGltZXpvbmUgfSA9IGFyZ3M7XG5cbiAgcmV0dXJuIHRhYmxlcy5yZWR1Y2UoXG4gICAgKHJlc3VsdCwgdGFibGUpID0+IHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hcyB9ID0gcmVzdWx0O1xuICAgICAgY29uc3QgeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUsIHNjaGVtYSB9ID0gdGFibGU7XG5cbiAgICAgIGNvbnN0IGNvbHVtbnNSZWNvcmQgPSBjb2x1bW5zXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBvc2l0aW9uIC0gYi5wb3NpdGlvbilcbiAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAoY29sdW1ucywgY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGF0eXBlLCBkZWZhdWx0OiBkZWZhdWx0VmFsdWUsIG5hbWU6IGNvbHVtbk5hbWUgfSA9IGNvbHVtbjtcblxuICAgICAgICAgICAgY29uc3QgaW5kZXhPZlBhcmVudGhlc2lzID0gZGF0YXR5cGUuaW5kZXhPZihcIihcIik7XG4gICAgICAgICAgICBjb25zdCBzdHJpcHBlZERhdGFUeXBlID0gKGluZGV4T2ZQYXJlbnRoZXNpcyA+IC0xID8gZGF0YXR5cGUuc3Vic3RyaW5nKDAsIGluZGV4T2ZQYXJlbnRoZXNpcykgOiBkYXRhdHlwZSlcbiAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgY29uc3QgaXNBdXRvaW5jcmVtZW50ID0gQm9vbGVhbihjb2x1bW4uYXV0b2luY3JlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBpc0NvbXB1dGVkID0gQm9vbGVhbihjb2x1bW4uY29tcHV0ZWQpO1xuICAgICAgICAgICAgY29uc3QgbnVsbGFibGUgPSBCb29sZWFuKGNvbHVtbi5udWxsYWJsZSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNvbHVtbnMsXG4gICAgICAgICAgICAgIFtjb2x1bW5OYW1lXToge1xuICAgICAgICAgICAgICAgIGRhdGF0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAuLi4oTVlTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQVtzdHJpcHBlZERhdGFUeXBlXSB8fCB7IGdyb3VwOiBcInJhd1wiIH0pLFxuICAgICAgICAgICAgICAgICAgaXNBcnJheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBpc05hdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IHN0cmlwcGVkRGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgICBvcHRpb25zOlxuICAgICAgICAgICAgICAgICAgICBzdHJpcHBlZERhdGFUeXBlID09PSBcImVudW1cIiA/IGRhdGF0eXBlLnNsaWNlKGBlbnVtKCdgLmxlbmd0aCwgLWAnKWAubGVuZ3RoKS5zcGxpdChgJywnYCkgOiBbXSxcbiAgICAgICAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgICBma0NvbHVtbjogY29sdW1uLmZrX2NvbHVtbixcbiAgICAgICAgICAgICAgICBma1NjaGVtYTogc2NoZW1hLFxuICAgICAgICAgICAgICAgIGZrVGFibGU6IGNvbHVtbi5ma190YWJsZSxcbiAgICAgICAgICAgICAgICBpc0F1dG9pbmNyZW1lbnQsXG4gICAgICAgICAgICAgICAgaXNDb21wdXRlZCxcbiAgICAgICAgICAgICAgICBpc1JlcXVpcmVkOiAhbnVsbGFibGUgJiYgIWlzQXV0b2luY3JlbWVudCAmJiAhaXNDb21wdXRlZCAmJiBkZWZhdWx0VmFsdWUgPT0gbnVsbCxcbiAgICAgICAgICAgICAgICBuYW1lOiBjb2x1bW5OYW1lLFxuICAgICAgICAgICAgICAgIG51bGxhYmxlLFxuICAgICAgICAgICAgICAgIHBrUG9zaXRpb246IGNvbHVtbi5wayxcbiAgICAgICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICAgICAgdGFibGU6IHRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgfSBhcyBjb25zdCBzYXRpc2ZpZXMgQ29sdW1uLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHt9IGFzIFRhYmxlW1wiY29sdW1uc1wiXSxcbiAgICAgICAgKTtcblxuICAgICAgaWYgKHNjaGVtYXNbc2NoZW1hXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNjaGVtYXNbc2NoZW1hXSA9IHsgbmFtZTogc2NoZW1hLCB0YWJsZXM6IHt9IH07XG4gICAgICB9XG5cbiAgICAgIHNjaGVtYXNbc2NoZW1hXS50YWJsZXNbdGFibGVOYW1lXSA9IHsgY29sdW1uczogY29sdW1uc1JlY29yZCwgbmFtZTogdGFibGVOYW1lLCBzY2hlbWEgfTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHsgZmlsdGVyT3BlcmF0b3JzLCBxdWVyeSwgc2NoZW1hczoge30sIHRpbWV6b25lIH0gc2F0aXNmaWVzIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0IGFzIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0LFxuICApO1xufVxuXG5jb25zdCBmaWx0ZXJPcGVyYXRvcnMgPSBbXG4gIFwiPVwiLFxuICBcIiE9XCIsXG4gIFwiPlwiLFxuICBcIj49XCIsXG4gIFwiPFwiLFxuICBcIjw9XCIsXG4gIFwiaXNcIixcbiAgXCJpcyBub3RcIixcbiAgXCJsaWtlXCIsXG4gIFwibm90IGxpa2VcIixcbl0gc2F0aXNmaWVzIEZpbHRlck9wZXJhdG9yW107XG5cbi8qKlxuICogRm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrSW50cm9zcGVjdCgpIHtcbiAgY29uc3QgdGFibGVzID0gbW9ja1RhYmxlc1F1ZXJ5KCk7XG4gIGNvbnN0IFt7IHRpbWV6b25lIH1dID0gbW9ja1RpbWV6b25lUXVlcnkoKTtcbiAgY29uc3QgcXVlcnkgPSB7IHBhcmFtZXRlcnM6IFtdLCBzcWw6IFwiPG1vY2tlZD5cIiB9IGFzIFF1ZXJ5O1xuXG4gIHJldHVybiBjcmVhdGVJbnRyb3NwZWN0aW9uKHsgdGFibGVzLCB0aW1lem9uZSwgcXVlcnkgfSkgYXMge1xuICAgIC8vIGJlc3QgZWZmb3J0LCBubyBuZWVkIGdvIG92ZXJib2FyZC5cbiAgICBzY2hlbWFzOiB7XG4gICAgICBbSyBpbiAodHlwZW9mIHRhYmxlcylbbnVtYmVyXVtcInNjaGVtYVwiXV06IHtcbiAgICAgICAgbmFtZTogSztcbiAgICAgICAgdGFibGVzOiB7XG4gICAgICAgICAgW1QgaW4gKHR5cGVvZiB0YWJsZXMpW251bWJlcl1bXCJuYW1lXCJdXTogVGFibGU7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH07XG4gICAgdGltZXpvbmU6IHR5cGVvZiB0aW1lem9uZTtcbiAgICBmaWx0ZXJPcGVyYXRvcnM6IEZpbHRlck9wZXJhdG9yW107XG4gICAgcXVlcnk6IFF1ZXJ5O1xuICB9IHNhdGlzZmllcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdDtcbn1cblxuZnVuY3Rpb24gam9pblNlcXVlbmNlKHNlcXVlbmNlOiByZWFkb25seSBbUXVlcnk8dW5rbm93bj4sIFF1ZXJ5PHVua25vd24+XSk6IFF1ZXJ5PHVua25vd24+IHtcbiAgY29uc3QgW3F1ZXJ5MCwgcXVlcnkxXSA9IHNlcXVlbmNlO1xuXG4gIHJldHVybiB7XG4gICAgcGFyYW1ldGVyczogcXVlcnkwLnBhcmFtZXRlcnMuY29uY2F0KHF1ZXJ5MS5wYXJhbWV0ZXJzKSxcbiAgICBzcWw6IGAke3F1ZXJ5MC5zcWx9O1xcbiR7cXVlcnkxLnNxbH1gLFxuICB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgRGF0YVR5cGUgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuXG5leHBvcnQgY29uc3QgTVlTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQTogUmVjb3JkPHN0cmluZywgUGljazxEYXRhVHlwZSwgXCJmb3JtYXRcIiB8IFwiZ3JvdXBcIj4+ID0ge1xuICBiaWdpbnQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGJpbmFyeToge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBiaXQ6IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgYmxvYjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBjaGFyOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIFwiY2hhciBiaW5hcnlcIjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBkYXRlOiB7XG4gICAgZm9ybWF0OiBcIllZWVktTU0tRERcIixcbiAgICBncm91cDogXCJkYXRldGltZVwiLFxuICB9LFxuICBkYXRldGltZToge1xuICAgIGZvcm1hdDogXCJZWVlZLU1NLUREIEhIOm1tOnNzLlNTU1wiLFxuICAgIGdyb3VwOiBcImRhdGV0aW1lXCIsXG4gIH0sXG4gIGRlYzoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgZGVjaW1hbDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgZG91YmxlOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBcImRvdWJsZSBwcmVjaXNpb25cIjoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgZW51bToge1xuICAgIGdyb3VwOiBcImVudW1cIixcbiAgfSxcbiAgZml4ZWQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGZsb2F0OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBnZW9tZXRyeToge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBnZW9tZXRyeWNvbGxlY3Rpb246IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgaW50OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBpbnRlZ2VyOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBqc29uOiB7XG4gICAgZ3JvdXA6IFwianNvblwiLFxuICB9LFxuICBsaW5lc3RyaW5nOiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIGxvbmc6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgXCJsb25nIHZhcmNoYXJcIjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBsb25nYmxvYjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBsb25ndGV4dDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBsb25ndmFyYmluYXJ5OiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIGxvbmd2YXJjaGFyOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIG1lZGl1bWJsb2I6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgbWVkaXVtaW50OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBtZWRpdW10ZXh0OiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIG11bHRpbGluZXN0cmluZzoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBtdWx0aXBvaW50OiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIG11bHRpcG9seWdvbjoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBudW1lcmljOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBwb2ludDoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBwb2x5Z29uOiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIHJlYWw6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBodHRwczovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi85LjUvZW4vc2V0Lmh0bWxcbiAgICovXG4gIHNldDoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBzbWFsbGludDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgdGV4dDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICB0aW1lOiB7XG4gICAgZm9ybWF0OiBcIkhIOm1tOnNzLlNTU1wiLFxuICAgIGdyb3VwOiBcInRpbWVcIixcbiAgfSxcbiAgdGltZXN0YW1wOiB7XG4gICAgZm9ybWF0OiBcIllZWVktTU0tREQgSEg6bW06c3MuU1NTXCIsXG4gICAgZ3JvdXA6IFwiZGF0ZXRpbWVcIixcbiAgfSxcbiAgdGlueWJsb2I6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgdGlueWludDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgdGlueXRleHQ6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgdmFyYmluYXJ5OiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIHZhcmNoYXI6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgXCJ2YXJjaGFyIGJpbmFyeVwiOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBodHRwczovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi85LjUvZW4vdmVjdG9yLmh0bWxcbiAgICovXG4gIHZlY3Rvcjoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICB5ZWFyOiB7XG4gICAgZm9ybWF0OiBcIllZWVlcIixcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG59O1xuIiwgImltcG9ydCB7IHR5cGUgSW5mZXJSZXN1bHQsIHR5cGUgU2ltcGxlUmVmZXJlbmNlRXhwcmVzc2lvbiwgc3FsIH0gZnJvbSBcImt5c2VseVwiO1xuaW1wb3J0IHR5cGUgeyBPa1BhY2tldFBhcmFtcyB9IGZyb20gXCJteXNxbDJcIjtcblxuaW1wb3J0IHR5cGUgeyBBZGFwdGVyRGVsZXRlRGV0YWlscywgQWRhcHRlclF1ZXJ5RGV0YWlscywgQWRhcHRlclVwZGF0ZURldGFpbHMsIFRhYmxlIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB7XG4gIGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzLFxuICBhcHBseVRyYW5zZm9ybWF0aW9ucyxcbiAgdHlwZSBCdWlsZGVyUmVxdWlyZW1lbnRzLFxuICBjb21waWxlLFxuICBnZXRTZWxlY3RGaWx0ZXJFeHByZXNzaW9uLFxufSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB0eXBlIHsgQmlnSW50U3RyaW5nIH0gZnJvbSBcIi4uL3R5cGUtdXRpbHNcIjtcbmltcG9ydCB7IGdldE15U1FMQnVpbGRlciB9IGZyb20gXCIuL2J1aWxkZXJcIjtcbmltcG9ydCB7IG1vY2tUYWJsZXNRdWVyeSB9IGZyb20gXCIuL2ludHJvc3BlY3Rpb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlbGV0ZVF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyRGVsZXRlRGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgcm93cyxcbiAgICB0YWJsZTogeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUgfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldE15U1FMQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KHJlcXVpcmVtZW50cyk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoYnVpbGRlci5kZWxldGVGcm9tKHRhYmxlTmFtZSkuJGNhbGwoYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMocm93cywgY29sdW1ucykpLiRjYXN0VG88T2tQYWNrZXRQYXJhbXM+KCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5zZXJ0UXVlcnkoXG4gIGRldGFpbHM6IHsgcm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTsgdGFibGU6IFRhYmxlIH0sXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIHJvd3MsXG4gICAgdGFibGU6IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRNeVNRTEJ1aWxkZXI8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC5pbnNlcnRJbnRvKHRhYmxlTmFtZSlcbiAgICAgIC52YWx1ZXMoYXBwbHlUcmFuc2Zvcm1hdGlvbnMoeyBjb2x1bW5zLCBjb250ZXh0OiBcImluc2VydFwiLCBzdXBwb3J0c0RlZmF1bHRLZXl3b3JkOiB0cnVlLCB2YWx1ZXM6IHJvd3MgfSkpXG4gICAgICAuJGNhc3RUbzxPa1BhY2tldFBhcmFtcz4oKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEluc2VydFJlZmV0Y2hRdWVyeShcbiAgZGV0YWlsczogeyBjcml0ZXJpYTogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTsgdGFibGU6IFRhYmxlIH0sXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIGNyaXRlcmlhLFxuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSB9LFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID0gZ2V0TXlTUUxCdWlsZGVyPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcblxuICByZXR1cm4gY29tcGlsZShcbiAgICBidWlsZGVyXG4gICAgICAuc2VsZWN0RnJvbSh0YWJsZU5hbWUpXG4gICAgICAuJGNhbGwoYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMoY3JpdGVyaWEsIGNvbHVtbnMpKVxuICAgICAgLnNlbGVjdChPYmplY3Qua2V5cyhjb2x1bW5zKSlcbiAgICAgIC5zZWxlY3QoZ2V0Q3VycmVudFRpbWVzdGFtcE1pbGxpcygpLmFzKFwiX19wc19pbnNlcnRlZF9hdF9fXCIpKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVwZGF0ZVJlZmV0Y2hRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlclVwZGF0ZURldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIGNoYW5nZXMsXG4gICAgcm93LFxuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSB9LFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID0gZ2V0TXlTUUxCdWlsZGVyPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcblxuICByZXR1cm4gY29tcGlsZShcbiAgICBidWlsZGVyXG4gICAgICAuc2VsZWN0RnJvbSh0YWJsZU5hbWUpXG4gICAgICAuJGNhbGwoYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMoW3sgLi4ucm93LCAuLi5jaGFuZ2VzIH1dLCBjb2x1bW5zKSlcbiAgICAgIC5zZWxlY3QoT2JqZWN0LmtleXMoY29sdW1ucykpXG4gICAgICAuc2VsZWN0KGdldEN1cnJlbnRUaW1lc3RhbXBNaWxsaXMoKS5hcyhcIl9fcHNfdXBkYXRlZF9hdF9fXCIpKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdFF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyUXVlcnlEZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHtcbiAgICBmaWx0ZXIgPSB7IGFmdGVyOiBcImFuZFwiLCBmaWx0ZXJzOiBbXSwga2luZDogXCJGaWx0ZXJHcm91cFwiIH0sXG4gICAgcGFnZUluZGV4LFxuICAgIHBhZ2VTaXplLFxuICAgIHNvcnRPcmRlcixcbiAgICB0YWJsZTogeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUgfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldE15U1FMQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KHJlcXVpcmVtZW50cyk7XG5cbiAgY29uc3QgZmlsdGVyRXhwcmVzc2lvbiA9IGdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24oZmlsdGVyLmZpbHRlcnMsIGNvbHVtbnMpO1xuXG4gIGNvbnN0IEFHR19OQU1FID0gXCJfX3BzX2FnZ19fXCI7XG4gIGNvbnN0IENPVU5UX1JFRiA9IFwiX19wc19jb3VudF9fXCI7XG5cbiAgY29uc3QgY291bnRRdWVyeSA9IGJ1aWxkZXJcbiAgICAuc2VsZWN0RnJvbSh0YWJsZU5hbWUpXG4gICAgLndoZXJlKGZpbHRlckV4cHJlc3Npb24pXG4gICAgLnNlbGVjdCgoZWIpID0+IGViLmNhc3Q8QmlnSW50U3RyaW5nPihlYi5mbi5jb2FsZXNjZShlYi5mbi5jb3VudEFsbCgpLCBzcWwubGl0KDApKSwgXCJjaGFyXCIpLmFzKENPVU5UX1JFRikpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC53aXRoKEFHR19OQU1FLCAoKSA9PiBjb3VudFF1ZXJ5KVxuICAgICAgLnNlbGVjdEZyb20odGFibGVOYW1lKVxuICAgICAgLmlubmVySm9pbihBR0dfTkFNRSwgKGpiKSA9PiBqYi5vblRydWUoKSlcbiAgICAgIC8vIFRPRE86IGN1cnNvciBwYWdpbmF0aW9uP1xuICAgICAgLndoZXJlKGZpbHRlckV4cHJlc3Npb24pXG4gICAgICAuc2VsZWN0KFxuICAgICAgICBgJHtBR0dfTkFNRX0uJHtDT1VOVF9SRUZ9YCBzYXRpc2ZpZXMgU2ltcGxlUmVmZXJlbmNlRXhwcmVzc2lvbjxcbiAgICAgICAgICB7IFtBR0dfTkFNRV06IEluZmVyUmVzdWx0PHR5cGVvZiBjb3VudFF1ZXJ5PltudW1iZXJdIH0sXG4gICAgICAgICAgdHlwZW9mIEFHR19OQU1FXG4gICAgICAgID4sXG4gICAgICApXG4gICAgICAuc2VsZWN0KE9iamVjdC5rZXlzKGNvbHVtbnMpKVxuICAgICAgLiRjYWxsKChxYikgPT4gc29ydE9yZGVyLnJlZHVjZSgocWIsIGl0ZW0pID0+IHFiLm9yZGVyQnkoaXRlbS5jb2x1bW4sIGl0ZW0uZGlyZWN0aW9uKSwgcWIpKVxuICAgICAgLmxpbWl0KHBhZ2VTaXplKVxuICAgICAgLy8gd2UncmUgaW5qZWN0aW5nIHRoZSBvZmZzZXQgdmFsdWUgaGVyZSB0byBhdm9pZCBzZXJpYWxpemF0aW9uIGNvbXBsZXhpdHkgKGBiaWdpbnRgIGlzIGEgbm8tZ28gZm9yIGBKU09OLnN0cmluZ2lmeWApLlxuICAgICAgLm9mZnNldChzcWwubGl0KEJpZ0ludChwYWdlSW5kZXgpICogQmlnSW50KHBhZ2VTaXplKSkpLFxuICApO1xufVxuXG4vKipcbiAqIEZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja1NlbGVjdFF1ZXJ5KCkge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIGlkOiAxLFxuICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoXCIyMDI1LTAxLTI3VDAwOjAwOjAwLjAwMFpcIiksXG4gICAgICBkZWxldGVkX2F0OiBudWxsLFxuICAgICAgcm9sZTogXCJhZG1pblwiLFxuICAgICAgbmFtZTogXCJBbGljZVwiLFxuICAgICAgbmFtZV9yb2xlOiBcIkFsaWNlX2FkbWluXCIsXG4gICAgICBfX3BzX2NvdW50X186IFwiMlwiLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6IDIsXG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShcIjIwMjUtMDEtMjZUMjM6MDA6MDAuMDAwWlwiKSxcbiAgICAgIGRlbGV0ZWRfYXQ6IG51bGwsXG4gICAgICByb2xlOiBcIm1lbWJlclwiLFxuICAgICAgbmFtZTogXCJCb2JcIixcbiAgICAgIG5hbWVfcm9sZTogXCJCb2JfbWVtYmVyXCIsXG4gICAgICBfX3BzX2NvdW50X186IFwiMlwiLFxuICAgIH0sXG4gIF0gYXMgY29uc3Qgc2F0aXNmaWVzIHtcbiAgICAvLyBiZXN0IGVmZm9ydCBubyBuZWVkIHRvIGdvIG92ZXJib2FyZFxuICAgIFtLIGluIFJldHVyblR5cGU8dHlwZW9mIG1vY2tUYWJsZXNRdWVyeT5bMl1bXCJjb2x1bW5zXCJdW251bWJlcl1bXCJuYW1lXCJdIHwgXCJfX3BzX2NvdW50X19cIl06IHVua25vd247XG4gIH1bXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVwZGF0ZVF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyVXBkYXRlRGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgY2hhbmdlcyxcbiAgICByb3csXG4gICAgdGFibGU6IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lLCBzY2hlbWEgfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldE15U1FMQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KHJlcXVpcmVtZW50cyk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLndpdGhTY2hlbWEoc2NoZW1hKVxuICAgICAgLnVwZGF0ZVRhYmxlKHRhYmxlTmFtZSlcbiAgICAgIC5zZXQoYXBwbHlUcmFuc2Zvcm1hdGlvbnMoeyBjb2x1bW5zLCBjb250ZXh0OiBcInVwZGF0ZVwiLCBzdXBwb3J0c0RlZmF1bHRLZXl3b3JkOiB0cnVlLCB2YWx1ZXM6IGNoYW5nZXMgfSkpXG4gICAgICAuJGNhbGwoYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMoW3Jvd10sIGNvbHVtbnMpKVxuICAgICAgLiRjYXN0VG88T2tQYWNrZXRQYXJhbXM+KCksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRUaW1lc3RhbXBNaWxsaXMoKSB7XG4gIHJldHVybiBzcWw8bnVtYmVyIHwgc3RyaW5nPmBjYXN0KHVuaXhfdGltZXN0YW1wKG5vdygzKSkgKiAxMDAwIGFzIHVuc2lnbmVkKWA7XG59XG4iLCAiaW1wb3J0IHsgdHlwZSBLeXNlbHksIE15c3FsQWRhcHRlciwgTXlzcWxRdWVyeUNvbXBpbGVyIH0gZnJvbSBcImt5c2VseVwiO1xuXG5pbXBvcnQgeyB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsIGdldEJ1aWxkZXIgfSBmcm9tIFwiLi4vcXVlcnlcIjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBnZXRNeVNRTEJ1aWxkZXI8RGF0YWJhc2UgPSBhbnk+KFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKTogS3lzZWx5PERhdGFiYXNlPiB7XG4gIHJldHVybiBnZXRCdWlsZGVyKHsgLi4ucmVxdWlyZW1lbnRzLCBBZGFwdGVyOiBNeXNxbEFkYXB0ZXIsIFF1ZXJ5Q29tcGlsZXI6IE15c3FsUXVlcnlDb21waWxlciB9KTtcbn1cbiIsICJpbXBvcnQgeyB0eXBlIEluZmVyUmVzdWx0LCBzcWwgfSBmcm9tIFwia3lzZWx5XCI7XG5pbXBvcnQgeyBqc29uQnVpbGRPYmplY3QgfSBmcm9tIFwia3lzZWx5L2hlbHBlcnMvbXlzcWxcIjtcblxuaW1wb3J0IHsgdHlwZSBCdWlsZGVyUmVxdWlyZW1lbnRzLCBjb21waWxlLCB0eXBlIFF1ZXJ5UmVzdWx0IH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgeyBnZXRNeVNRTEJ1aWxkZXIgfSBmcm9tIFwiLi9idWlsZGVyXCI7XG5cbmludGVyZmFjZSBEYXRhYmFzZSB7XG4gIC8qKiBodHRwczovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi84LjQvZW4vaW5mb3JtYXRpb24tc2NoZW1hLWtleS1jb2x1bW4tdXNhZ2UtdGFibGUuaHRtbCAqL1xuICBcImluZm9ybWF0aW9uX3NjaGVtYS5LRVlfQ09MVU1OX1VTQUdFXCI6IHtcbiAgICBDT0xVTU5fTkFNRTogc3RyaW5nO1xuICAgIENPTlNUUkFJTlRfTkFNRTogc3RyaW5nO1xuICAgIE9SRElOQUxfUE9TSVRJT046IG51bWJlcjtcbiAgICAvKiogbnVsbCAtIHdoZW4gdW5pcXVlIG9yIHByaW1hcnkga2V5IGNvbnN0cmFpbnQuIDEtbiAtIHdoZW4gZm9yZWlnbiBrZXkgY29uc3RyYWludCAqL1xuICAgIFBPU0lUSU9OX0lOX1VOSVFVRV9DT05TVFJBSU5UOiBudW1iZXIgfCBudWxsO1xuICAgIFJFRkVSRU5DRURfQ09MVU1OX05BTUU6IHN0cmluZztcbiAgICBSRUZFUkVOQ0VEX1RBQkxFX05BTUU6IHN0cmluZztcbiAgICBUQUJMRV9OQU1FOiBzdHJpbmc7XG4gICAgVEFCTEVfU0NIRU1BOiBzdHJpbmc7XG4gIH07XG4gIC8qKiBodHRwczovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi84LjQvZW4vaW5mb3JtYXRpb24tc2NoZW1hLWNvbHVtbnMtdGFibGUuaHRtbCAqL1xuICBcImluZm9ybWF0aW9uX3NjaGVtYS5jb2x1bW5zXCI6IHtcbiAgICAvKiogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBjb2x1bW4uIFRoaXMgaXMgTlVMTCBpZiB0aGUgY29sdW1uIGhhcyBhbiBleHBsaWNpdCBkZWZhdWx0IG9mIE5VTEwsIG9yIGlmIHRoZSBjb2x1bW4gZGVmaW5pdGlvbiBpbmNsdWRlcyBubyBERUZBVUxUIGNsYXVzZS4gKi9cbiAgICBDT0xVTU5fREVGQVVMVDogc3RyaW5nIHwgbnVsbDtcbiAgICBDT0xVTU5fTkFNRTogc3RyaW5nO1xuICAgIC8qKiBDb250YWlucyB0aGUgdHlwZSBuYW1lIGFuZCBwb3NzaWJseSBvdGhlciBpbmZvcm1hdGlvbiBzdWNoIGFzIHRoZSBwcmVjaXNpb24gb3IgbGVuZ3RoLiAqL1xuICAgIENPTFVNTl9UWVBFOiBzdHJpbmc7XG4gICAgLyoqIEV4dHJhIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb2x1bW4uIFBvc3NpYmxlIHZhbHVlcyBhcmUgKi9cbiAgICBFWFRSQTpcbiAgICAgIHwgXCJcIlxuICAgICAgfCBcImF1dG9faW5jcmVtZW50XCJcbiAgICAgIHwgXCJvbiB1cGRhdGUgQ1VSUkVOVF9USU1FU1RBTVBcIlxuICAgICAgfCBcIlNUT1JFRCBHRU5FUkFURURcIlxuICAgICAgfCBcIlZJUlRVQUwgR0VORVJBVEVEXCJcbiAgICAgIHwgXCJERUZBVUxUIEdFTkVSQVRFRFwiO1xuICAgIElTX05VTExBQkxFOiBcIllFU1wiIHwgXCJOT1wiO1xuICAgIC8qKiBUaGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbiB3aXRoaW4gdGhlIHRhYmxlLiBPUkRJTkFMX1BPU0lUSU9OIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHlvdSBtaWdodCB3YW50IHRvIHNheSBPUkRFUiBCWSBPUkRJTkFMX1BPU0lUSU9OLiBVbmxpa2UgU0hPVyBDT0xVTU5TLCBTRUxFQ1QgZnJvbSB0aGUgQ09MVU1OUyB0YWJsZSBkb2VzIG5vdCBoYXZlIGF1dG9tYXRpYyBvcmRlcmluZy4gKi9cbiAgICBPUkRJTkFMX1BPU0lUSU9OOiBudW1iZXI7XG4gICAgVEFCTEVfTkFNRTogc3RyaW5nO1xuICAgIFRBQkxFX1NDSEVNQTogc3RyaW5nO1xuICB9O1xuICAvKiogaHR0cHM6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vOC40L2VuL2luZm9ybWF0aW9uLXNjaGVtYS10YWJsZXMtdGFibGUuaHRtbCAqL1xuICBcImluZm9ybWF0aW9uX3NjaGVtYS50YWJsZXNcIjoge1xuICAgIFRBQkxFX05BTUU6IHN0cmluZztcbiAgICAvKiogVGhlIG5hbWUgb2YgdGhlIHNjaGVtYSAoZGF0YWJhc2UpIHRvIHdoaWNoIHRoZSB0YWJsZSBiZWxvbmdzLiAqL1xuICAgIFRBQkxFX1NDSEVNQTogc3RyaW5nO1xuICAgIC8qKiBCQVNFIFRBQkxFIGZvciBhIHRhYmxlLCBWSUVXIGZvciBhIHZpZXcsIG9yIFNZU1RFTSBWSUVXIGZvciBhbiBJTkZPUk1BVElPTl9TQ0hFTUEgdGFibGUuICovXG4gICAgVEFCTEVfVFlQRTogXCJCQVNFIFRBQkxFXCIgfCBcIlZJRVdcIiB8IFwiU1lTVEVNIFZJRVdcIjtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlc1F1ZXJ5KHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4pIHtcbiAgY29uc3QgZGF0YWJhc2UgPSBzcWw8c3RyaW5nPmBkYXRhYmFzZSgpYDtcblxuICBjb25zdCBidWlsZGVyID0gZ2V0TXlTUUxCdWlsZGVyPERhdGFiYXNlPihyZXF1aXJlbWVudHMpO1xuXG4gIGNvbnN0IGNvbHVtbnNRdWVyeSA9IGJ1aWxkZXJcbiAgICAuc2VsZWN0RnJvbShcImluZm9ybWF0aW9uX3NjaGVtYS5jb2x1bW5zIGFzIGNcIilcbiAgICAubGVmdEpvaW4oXCJpbmZvcm1hdGlvbl9zY2hlbWEuS0VZX0NPTFVNTl9VU0FHRSBhcyBrY3VcIiwgKGpiKSA9PlxuICAgICAgamJcbiAgICAgICAgLm9uKFwia2N1LlRBQkxFX1NDSEVNQVwiLCBcIj1cIiwgZGF0YWJhc2UpXG4gICAgICAgIC5vblJlZihcImtjdS5UQUJMRV9OQU1FXCIsIFwiPVwiLCBcImMuVEFCTEVfTkFNRVwiKVxuICAgICAgICAub25SZWYoXCJrY3UuQ09MVU1OX05BTUVcIiwgXCI9XCIsIFwiYy5DT0xVTU5fTkFNRVwiKVxuICAgICAgICAvLyBvbmx5IGdldCBmb3JlaWduIGtleSBjb25zdHJhaW50c1xuICAgICAgICAub24oXCJrY3UuUE9TSVRJT05fSU5fVU5JUVVFX0NPTlNUUkFJTlRcIiwgXCJpcyBub3RcIiwgbnVsbCksXG4gICAgKVxuICAgIC5sZWZ0Sm9pbihcImluZm9ybWF0aW9uX3NjaGVtYS5LRVlfQ09MVU1OX1VTQUdFIGFzIHBrX2tjdVwiLCAoamIpID0+XG4gICAgICBqYlxuICAgICAgICAub24oXCJwa19rY3UuVEFCTEVfU0NIRU1BXCIsIFwiPVwiLCBkYXRhYmFzZSlcbiAgICAgICAgLm9uUmVmKFwicGtfa2N1LlRBQkxFX05BTUVcIiwgXCI9XCIsIFwiYy5UQUJMRV9OQU1FXCIpXG4gICAgICAgIC5vblJlZihcInBrX2tjdS5DT0xVTU5fTkFNRVwiLCBcIj1cIiwgXCJjLkNPTFVNTl9OQU1FXCIpXG4gICAgICAgIC8vIG9ubHkgZ2V0IHByaW1hcnkga2V5IGNvbnN0cmFpbnQgLSBndWFyYW50ZWVkIHRvIGJlIFwiUFJJTUFSWVwiIGV2ZW4gaWYgYSBuYW1lIHdhcyBnaXZlbiBkdXJpbmcgY3JlYXRpb25cbiAgICAgICAgLm9uKFwicGtfa2N1LkNPTlNUUkFJTlRfTkFNRVwiLCBcIj1cIiwgXCJQUklNQVJZXCIpLFxuICAgIClcbiAgICAud2hlcmUoXCJjLlRBQkxFX1NDSEVNQVwiLCBcIj1cIiwgZGF0YWJhc2UpXG4gICAgLnNlbGVjdChbXG4gICAgICBcImMuQ09MVU1OX0RFRkFVTFQgYXMgZGVmYXVsdFwiLFxuICAgICAgXCJjLkNPTFVNTl9OQU1FIGFzIG5hbWVcIixcbiAgICAgIFwiYy5DT0xVTU5fVFlQRSBhcyBkYXRhdHlwZVwiLFxuICAgICAgXCJjLk9SRElOQUxfUE9TSVRJT04gYXMgcG9zaXRpb25cIixcbiAgICAgIFwiYy5UQUJMRV9OQU1FXCIsXG4gICAgICBcImtjdS5SRUZFUkVOQ0VEX1RBQkxFX05BTUUgYXMgZmtfdGFibGVcIixcbiAgICAgIFwia2N1LlJFRkVSRU5DRURfQ09MVU1OX05BTUUgYXMgZmtfY29sdW1uXCIsXG4gICAgICBcInBrX2tjdS5PUkRJTkFMX1BPU0lUSU9OIGFzIHBrXCIsXG4gICAgXSlcbiAgICAuc2VsZWN0KChlYikgPT4gW1xuICAgICAgZWIoXCJjLkVYVFJBXCIsIFwiPVwiLCBcImF1dG9faW5jcmVtZW50XCIpLmFzKFwiYXV0b2luY3JlbWVudFwiKSxcbiAgICAgIGViKFwiYy5FWFRSQVwiLCBcImluXCIsIFtcIm9uIHVwZGF0ZSBDVVJSRU5UX1RJTUVTVEFNUFwiLCBcIlNUT1JFRCBHRU5FUkFURURcIiwgXCJWSVJUVUFMIEdFTkVSQVRFRFwiXSkuYXMoXCJjb21wdXRlZFwiKSxcbiAgICAgIGViKFwiYy5JU19OVUxMQUJMRVwiLCBcIj1cIiwgXCJZRVNcIikuYXMoXCJudWxsYWJsZVwiKSxcbiAgICBdKTtcblxuICByZXR1cm4gY29tcGlsZShcbiAgICBnZXRNeVNRTEJ1aWxkZXI8RGF0YWJhc2U+KHJlcXVpcmVtZW50cylcbiAgICAgIC53aXRoKFwiY29sc1wiLCAoKSA9PiBjb2x1bW5zUXVlcnkpXG4gICAgICAuc2VsZWN0RnJvbShcImluZm9ybWF0aW9uX3NjaGVtYS50YWJsZXMgYXMgdFwiKVxuICAgICAgLmlubmVySm9pbihcImNvbHMgYXMgY1wiLCAoamIpID0+IGpiLm9uUmVmKFwiYy5UQUJMRV9OQU1FXCIsIFwiPVwiLCBcInQuVEFCTEVfTkFNRVwiKSlcbiAgICAgIC53aGVyZShcInQuVEFCTEVfU0NIRU1BXCIsIFwiPVwiLCBkYXRhYmFzZSlcbiAgICAgIC53aGVyZShcInQuVEFCTEVfVFlQRVwiLCBcImluXCIsIFtcIkJBU0UgVEFCTEVcIiwgXCJWSUVXXCJdKVxuICAgICAgLmdyb3VwQnkoW2RhdGFiYXNlLCBcInQuVEFCTEVfTkFNRVwiLCBcInQuVEFCTEVfVFlQRVwiXSlcbiAgICAgIC5zZWxlY3QoW2RhdGFiYXNlLmFzKFwic2NoZW1hXCIpLCBcInQuVEFCTEVfTkFNRSBhcyBuYW1lXCIsIFwidC5UQUJMRV9UWVBFIGFzIHR5cGVcIl0pXG4gICAgICAuJG5hcnJvd1R5cGU8eyB0eXBlOiBcIkJBU0UgVEFCTEVcIiB8IFwiVklFV1wiIH0+KClcbiAgICAgIC5zZWxlY3QoKGViKSA9PlxuICAgICAgICBlYlxuICAgICAgICAgIC5mbjxPbWl0PEluZmVyUmVzdWx0PHR5cGVvZiBjb2x1bW5zUXVlcnk+W251bWJlcl0sIFwiVEFCTEVfTkFNRVwiPltdPihcImpzb25fYXJyYXlhZ2dcIiwgW1xuICAgICAgICAgICAganNvbkJ1aWxkT2JqZWN0KHtcbiAgICAgICAgICAgICAgYXV0b2luY3JlbWVudDogZWIucmVmKFwiYy5hdXRvaW5jcmVtZW50XCIpLFxuICAgICAgICAgICAgICBjb21wdXRlZDogZWIucmVmKFwiYy5jb21wdXRlZFwiKSxcbiAgICAgICAgICAgICAgZGF0YXR5cGU6IGViLnJlZihcImMuZGF0YXR5cGVcIiksXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IGViLnJlZihcImMuZGVmYXVsdFwiKSxcbiAgICAgICAgICAgICAgZmtfY29sdW1uOiBlYi5yZWYoXCJjLmZrX2NvbHVtblwiKSxcbiAgICAgICAgICAgICAgZmtfdGFibGU6IGViLnJlZihcImMuZmtfdGFibGVcIiksXG4gICAgICAgICAgICAgIG5hbWU6IGViLnJlZihcImMubmFtZVwiKSxcbiAgICAgICAgICAgICAgcG9zaXRpb246IGViLnJlZihcImMucG9zaXRpb25cIiksXG4gICAgICAgICAgICAgIHBrOiBlYi5yZWYoXCJjLnBrXCIpLFxuICAgICAgICAgICAgICBudWxsYWJsZTogZWIucmVmKFwiYy5udWxsYWJsZVwiKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0pXG4gICAgICAgICAgLmFzKFwiY29sdW1uc1wiKSxcbiAgICAgIClcbiAgICAgIC5vcmRlckJ5KFwidC5UQUJMRV9TQ0hFTUFcIilcbiAgICAgIC5vcmRlckJ5KFwidC5UQUJMRV9OQU1FXCIpXG4gICAgICAub3JkZXJCeShcInQuVEFCTEVfVFlQRVwiKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vY2tUYWJsZXNRdWVyeSgpIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvaW5jcmVtZW50OiAxLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIGRhdGF0eXBlOiBcImludFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIG5hbWU6IFwiaWRcIixcbiAgICAgICAgICBudWxsYWJsZTogMCxcbiAgICAgICAgICBwazogMSxcbiAgICAgICAgICBwb3NpdGlvbjogMSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9pbmNyZW1lbnQ6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiYmluYXJ5KDE2KVwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwidXVpZF90b19iaW4odXVpZCgpKVwiLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBuYW1lOiBcInV1aWRcIixcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBwazogbnVsbCxcbiAgICAgICAgICBwb3NpdGlvbjogMixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9pbmNyZW1lbnQ6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidmFyY2hhcigyNTUpXCIsXG4gICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgbmFtZTogXCJuYW1lXCIsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgcGs6IG51bGwsXG4gICAgICAgICAgcG9zaXRpb246IDMsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvaW5jcmVtZW50OiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAxLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRleHRcIixcbiAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBuYW1lOiBcImlkX25hbWVcIixcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBwazogbnVsbCxcbiAgICAgICAgICBwb3NpdGlvbjogNCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBuYW1lOiBcImFuaW1hbHNcIixcbiAgICAgIHNjaGVtYTogXCJzdHVkaW9cIixcbiAgICAgIHR5cGU6IFwiQkFTRSBUQUJMRVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAgYXV0b2luY3JlbWVudDogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBkYXRhdHlwZTogXCJjaGFyKDM2KVwiLFxuICAgICAgICAgIGRlZmF1bHQ6IFwidXVpZCgpXCIsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIG5hbWU6IFwiaWRcIixcbiAgICAgICAgICBudWxsYWJsZTogMCxcbiAgICAgICAgICBwazogMSxcbiAgICAgICAgICBwb3NpdGlvbjogMSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9pbmNyZW1lbnQ6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICAgIG51bGxhYmxlOiAwLFxuICAgICAgICAgIHBrOiAyLFxuICAgICAgICAgIHBvc2l0aW9uOiAyLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYXV0b2luY3JlbWVudDogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBkYXRhdHlwZTogXCJ0aW1lc3RhbXBcIixcbiAgICAgICAgICBkZWZhdWx0OiBcIkNVUlJFTlRfVElNRVNUQU1QXCIsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIG5hbWU6IFwiY3JlYXRlZF9hdFwiLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIHBrOiBudWxsLFxuICAgICAgICAgIHBvc2l0aW9uOiAzLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIG5hbWU6IFwiY29tcG9zaXRlX3BrXCIsXG4gICAgICBzY2hlbWE6IFwic3R1ZGlvXCIsXG4gICAgICB0eXBlOiBcIkJBU0UgVEFCTEVcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9pbmNyZW1lbnQ6IDEsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiaW50XCIsXG4gICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgbmFtZTogXCJpZFwiLFxuICAgICAgICAgIG51bGxhYmxlOiAwLFxuICAgICAgICAgIHBrOiAxLFxuICAgICAgICAgIHBvc2l0aW9uOiAxLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYXV0b2luY3JlbWVudDogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBkYXRhdHlwZTogXCJ0aW1lc3RhbXBcIixcbiAgICAgICAgICBkZWZhdWx0OiBcImN1cnJlbnRfdGltZXN0YW1wXCIsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIG5hbWU6IFwiY3JlYXRlZF9hdFwiLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIHBrOiBudWxsLFxuICAgICAgICAgIHBvc2l0aW9uOiAyLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYXV0b2luY3JlbWVudDogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBkYXRhdHlwZTogXCJ0aW1lc3RhbXBcIixcbiAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBuYW1lOiBcImRlbGV0ZWRfYXRcIixcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBwazogbnVsbCxcbiAgICAgICAgICBwb3NpdGlvbjogMyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9pbmNyZW1lbnQ6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIG5hbWU6IFwicm9sZVwiLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIHBrOiBudWxsLFxuICAgICAgICAgIHBvc2l0aW9uOiA0LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYXV0b2luY3JlbWVudDogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBkYXRhdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgbmFtZTogXCJuYW1lXCIsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgcGs6IG51bGwsXG4gICAgICAgICAgcG9zaXRpb246IDUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvaW5jcmVtZW50OiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAxLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRleHRcIixcbiAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBuYW1lOiBcIm5hbWVfcm9sZVwiLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIHBrOiBudWxsLFxuICAgICAgICAgIHBvc2l0aW9uOiA2LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIG5hbWU6IFwidXNlcnNcIixcbiAgICAgIHNjaGVtYTogXCJzdHVkaW9cIixcbiAgICAgIHR5cGU6IFwiQkFTRSBUQUJMRVwiLFxuICAgIH0sXG4gIF0gYXMgY29uc3Qgc2F0aXNmaWVzIFF1ZXJ5UmVzdWx0PHR5cGVvZiBnZXRUYWJsZXNRdWVyeT47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lem9uZVF1ZXJ5KHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4pIHtcbiAgY29uc3QgYnVpbGRlciA9IGdldE15U1FMQnVpbGRlcihyZXF1aXJlbWVudHMpO1xuXG4gIGNvbnN0IHNlc3Npb25UeiA9IHNxbDxcIlNZU1RFTVwiIHwgKHN0cmluZyAmIHt9KT5gQEBzZXNzaW9uLnRpbWVfem9uZWA7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLnNlbGVjdE5vRnJvbShcbiAgICAgICAgYnVpbGRlclxuICAgICAgICAgIC5jYXNlKClcbiAgICAgICAgICAud2hlbihzZXNzaW9uVHosIFwiPVwiLCBcIlNZU1RFTVwiKVxuICAgICAgICAgIC50aGVuKHNxbDxzdHJpbmc+YEBAc3lzdGVtX3RpbWVfem9uZWApXG4gICAgICAgICAgLmVsc2Uoc2Vzc2lvblR6KVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC5hcyhcInRpbWV6b25lXCIpLFxuICAgICAgKVxuICAgICAgLiRuYXJyb3dUeXBlPHsgdGltZXpvbmU6IHN0cmluZyB9PigpLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja1RpbWV6b25lUXVlcnkoKSB7XG4gIHJldHVybiBbeyB0aW1lem9uZTogXCJVVENcIiB9XSBhcyBjb25zdCBzYXRpc2ZpZXMgUXVlcnlSZXN1bHQ8dHlwZW9mIGdldFRpbWV6b25lUXVlcnk+O1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9teXNxbC5kLnRzXCIgLz5cbmltcG9ydCB7IHNxbCB9IGZyb20gJy4uL3Jhdy1idWlsZGVyL3NxbC5qcyc7XG5pbXBvcnQgeyBnZXRKc29uT2JqZWN0QXJncyB9IGZyb20gJy4uL3V0aWwvanNvbi1vYmplY3QtYXJncy5qcyc7XG4vKipcbiAqIEEgTXlTUUwgaGVscGVyIGZvciBhZ2dyZWdhdGluZyBhIHN1YnF1ZXJ5IGludG8gYSBKU09OIGFycmF5LlxuICpcbiAqIE5PVEU6IFRoaXMgaGVscGVyIGlzIG9ubHkgZ3VhcmFudGVlZCB0byBmdWxseSB3b3JrIHdpdGggdGhlIGJ1aWx0LWluIGBNeXNxbERpYWxlY3RgLlxuICogV2hpbGUgdGhlIHByb2R1Y2VkIFNRTCBpcyBjb21wYXRpYmxlIHdpdGggYWxsIE15U1FMIGRhdGFiYXNlcywgc29tZSB0aGlyZC1wYXJ0eSBkaWFsZWN0c1xuICogbWF5IG5vdCBwYXJzZSB0aGUgbmVzdGVkIEpTT04gaW50byBhcnJheXMuIEluIHRoZXNlIGNhc2VzIHlvdSBjYW4gdXNlIHRoZSBidWlsdCBpblxuICogYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gIHRvIHBhcnNlIHRoZSByZXN1bHRzLlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqc29uQXJyYXlGcm9tIH0gZnJvbSAna3lzZWx5L2hlbHBlcnMvbXlzcWwnXG4gKlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gKiAgIC5zZWxlY3QoKGViKSA9PiBbXG4gKiAgICAgJ2lkJyxcbiAqICAgICBqc29uQXJyYXlGcm9tKFxuICogICAgICAgZWIuc2VsZWN0RnJvbSgncGV0JylcbiAqICAgICAgICAgLnNlbGVjdChbJ3BldC5pZCBhcyBwZXRfaWQnLCAncGV0Lm5hbWUnXSlcbiAqICAgICAgICAgLndoZXJlUmVmKCdwZXQub3duZXJfaWQnLCAnPScsICdwZXJzb24uaWQnKVxuICogICAgICAgICAub3JkZXJCeSgncGV0Lm5hbWUnKVxuICogICAgICkuYXMoJ3BldHMnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKlxuICogcmVzdWx0WzBdPy5pZFxuICogcmVzdWx0WzBdPy5wZXRzWzBdPy5wZXRfaWRcbiAqIHJlc3VsdFswXT8ucGV0c1swXT8ubmFtZVxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBgaWRgLCAoXG4gKiAgIHNlbGVjdCBjYXN0KGNvYWxlc2NlKGpzb25fYXJyYXlhZ2coanNvbl9vYmplY3QoXG4gKiAgICAgJ3BldF9pZCcsIGBhZ2dgLmBwZXRfaWRgLFxuICogICAgICduYW1lJywgYGFnZ2AuYG5hbWVgXG4gKiAgICkpLCAnW10nKSBhcyBqc29uKSBmcm9tIChcbiAqICAgICBzZWxlY3QgYHBldGAuYGlkYCBhcyBgcGV0X2lkYCwgYHBldGAuYG5hbWVgXG4gKiAgICAgZnJvbSBgcGV0YFxuICogICAgIHdoZXJlIGBwZXRgLmBvd25lcl9pZGAgPSBgcGVyc29uYC5gaWRgXG4gKiAgICAgb3JkZXIgYnkgYHBldGAuYG5hbWVgXG4gKiAgICkgYXMgYGFnZ2BcbiAqICkgYXMgYHBldHNgXG4gKiBmcm9tIGBwZXJzb25gXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25BcnJheUZyb20oZXhwcikge1xuICAgIHJldHVybiBzcWwgYChzZWxlY3QgY2FzdChjb2FsZXNjZShqc29uX2FycmF5YWdnKGpzb25fb2JqZWN0KCR7c3FsLmpvaW4oZ2V0TXlzcWxKc29uT2JqZWN0QXJncyhleHByLnRvT3BlcmF0aW9uTm9kZSgpLCAnYWdnJykpfSkpLCAnW10nKSBhcyBqc29uKSBmcm9tICR7ZXhwcn0gYXMgYWdnKWA7XG59XG4vKipcbiAqIEEgTXlTUUwgaGVscGVyIGZvciB0dXJuaW5nIGEgc3VicXVlcnkgaW50byBhIEpTT04gb2JqZWN0LlxuICpcbiAqIFRoZSBzdWJxdWVyeSBtdXN0IG9ubHkgcmV0dXJuIG9uZSByb3cuXG4gKlxuICogTk9URTogVGhpcyBoZWxwZXIgaXMgb25seSBndWFyYW50ZWVkIHRvIGZ1bGx5IHdvcmsgd2l0aCB0aGUgYnVpbHQtaW4gYE15c3FsRGlhbGVjdGAuXG4gKiBXaGlsZSB0aGUgcHJvZHVjZWQgU1FMIGlzIGNvbXBhdGlibGUgd2l0aCBhbGwgTXlTUUwgZGF0YWJhc2VzLCBzb21lIHRoaXJkLXBhcnR5IGRpYWxlY3RzXG4gKiBtYXkgbm90IHBhcnNlIHRoZSBuZXN0ZWQgSlNPTiBpbnRvIG9iamVjdHMuIEluIHRoZXNlIGNhc2VzIHlvdSBjYW4gdXNlIHRoZSBidWlsdCBpblxuICogYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gIHRvIHBhcnNlIHRoZSByZXN1bHRzLlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqc29uT2JqZWN0RnJvbSB9IGZyb20gJ2t5c2VseS9oZWxwZXJzL215c3FsJ1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICogICAuc2VsZWN0KChlYikgPT4gW1xuICogICAgICdpZCcsXG4gKiAgICAganNvbk9iamVjdEZyb20oXG4gKiAgICAgICBlYi5zZWxlY3RGcm9tKCdwZXQnKVxuICogICAgICAgICAuc2VsZWN0KFsncGV0LmlkIGFzIHBldF9pZCcsICdwZXQubmFtZSddKVxuICogICAgICAgICAud2hlcmVSZWYoJ3BldC5vd25lcl9pZCcsICc9JywgJ3BlcnNvbi5pZCcpXG4gKiAgICAgICAgIC53aGVyZSgncGV0LmlzX2Zhdm9yaXRlJywgJz0nLCB0cnVlKVxuICogICAgICkuYXMoJ2Zhdm9yaXRlX3BldCcpXG4gKiAgIF0pXG4gKiAgIC5leGVjdXRlKClcbiAqXG4gKiByZXN1bHRbMF0/LmlkXG4gKiByZXN1bHRbMF0/LmZhdm9yaXRlX3BldD8ucGV0X2lkXG4gKiByZXN1bHRbMF0/LmZhdm9yaXRlX3BldD8ubmFtZVxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBgaWRgLCAoXG4gKiAgIHNlbGVjdCBqc29uX29iamVjdChcbiAqICAgICAncGV0X2lkJywgYG9iamAuYHBldF9pZGAsXG4gKiAgICAgJ25hbWUnLCBgb2JqYC5gbmFtZWBcbiAqICAgKSBmcm9tIChcbiAqICAgICBzZWxlY3QgYHBldGAuYGlkYCBhcyBgcGV0X2lkYCwgYHBldGAuYG5hbWVgXG4gKiAgICAgZnJvbSBgcGV0YFxuICogICAgIHdoZXJlIGBwZXRgLmBvd25lcl9pZGAgPSBgcGVyc29uYC5gaWRgXG4gKiAgICAgYW5kIGBwZXRgLmBpc19mYXZvcml0ZWAgPSA/XG4gKiAgICkgYXMgb2JqXG4gKiApIGFzIGBmYXZvcml0ZV9wZXRgXG4gKiBmcm9tIGBwZXJzb25gXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25PYmplY3RGcm9tKGV4cHIpIHtcbiAgICByZXR1cm4gc3FsIGAoc2VsZWN0IGpzb25fb2JqZWN0KCR7c3FsLmpvaW4oZ2V0TXlzcWxKc29uT2JqZWN0QXJncyhleHByLnRvT3BlcmF0aW9uTm9kZSgpLCAnb2JqJykpfSkgZnJvbSAke2V4cHJ9IGFzIG9iailgO1xufVxuLyoqXG4gKiBUaGUgTXlTUUwgYGpzb25fb2JqZWN0YCBmdW5jdGlvbi5cbiAqXG4gKiBOT1RFOiBUaGlzIGhlbHBlciBpcyBvbmx5IGd1YXJhbnRlZWQgdG8gZnVsbHkgd29yayB3aXRoIHRoZSBidWlsdC1pbiBgTXlzcWxEaWFsZWN0YC5cbiAqIFdoaWxlIHRoZSBwcm9kdWNlZCBTUUwgaXMgY29tcGF0aWJsZSB3aXRoIGFsbCBNeVNRTCBkYXRhYmFzZXMsIHNvbWUgdGhpcmQtcGFydHkgZGlhbGVjdHNcbiAqIG1heSBub3QgcGFyc2UgdGhlIG5lc3RlZCBKU09OIGludG8gb2JqZWN0cy4gSW4gdGhlc2UgY2FzZXMgeW91IGNhbiB1c2UgdGhlIGJ1aWx0IGluXG4gKiBgUGFyc2VKU09OUmVzdWx0c1BsdWdpbmAgdG8gcGFyc2UgdGhlIHJlc3VsdHMuXG4gKlxuICogIyMjIEV4YW1wbGVzXG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICogICAuc2VsZWN0KChlYikgPT4gW1xuICogICAgICdpZCcsXG4gKiAgICAganNvbkJ1aWxkT2JqZWN0KHtcbiAqICAgICAgIGZpcnN0OiBlYi5yZWYoJ2ZpcnN0X25hbWUnKSxcbiAqICAgICAgIGxhc3Q6IGViLnJlZignbGFzdF9uYW1lJyksXG4gKiAgICAgICBmdWxsOiBlYi5mbignY29uY2F0JywgWydmaXJzdF9uYW1lJywgZWIudmFsKCcgJyksICdsYXN0X25hbWUnXSlcbiAqICAgICB9KS5hcygnbmFtZScpXG4gKiAgIF0pXG4gKiAgIC5leGVjdXRlKClcbiAqXG4gKiByZXN1bHRbMF0/LmlkXG4gKiByZXN1bHRbMF0/Lm5hbWUuZmlyc3RcbiAqIHJlc3VsdFswXT8ubmFtZS5sYXN0XG4gKiByZXN1bHRbMF0/Lm5hbWUuZnVsbFxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBcImlkXCIsIGpzb25fb2JqZWN0KFxuICogICAnZmlyc3QnLCBmaXJzdF9uYW1lLFxuICogICAnbGFzdCcsIGxhc3RfbmFtZSxcbiAqICAgJ2Z1bGwnLCBjb25jYXQoYGZpcnN0X25hbWVgLCA/LCBgbGFzdF9uYW1lYClcbiAqICkgYXMgXCJuYW1lXCJcbiAqIGZyb20gXCJwZXJzb25cIlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uQnVpbGRPYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIHNxbCBganNvbl9vYmplY3QoJHtzcWwuam9pbihPYmplY3Qua2V5cyhvYmopLmZsYXRNYXAoKGspID0+IFtzcWwubGl0KGspLCBvYmpba11dKSl9KWA7XG59XG5mdW5jdGlvbiBnZXRNeXNxbEpzb25PYmplY3RBcmdzKG5vZGUsIHRhYmxlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGdldEpzb25PYmplY3RBcmdzKG5vZGUsIHRhYmxlKTtcbiAgICB9XG4gICAgY2F0Y2gge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ015U1FMIGpzb25BcnJheUZyb20gYW5kIGpzb25PYmplY3RGcm9tIGZ1bmN0aW9ucyBjYW4gb25seSBoYW5kbGUgZXhwbGljaXQgc2VsZWN0aW9ucyBkdWUgdG8gbGltaXRhdGlvbnMgb2YgdGhlIGpzb25fb2JqZWN0IGZ1bmN0aW9uLiBzZWxlY3RB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LEtBQ0EsU0FDQSxPQUNBLFVBQ0YsRUFLTyxTQUFTQyxJQUFpQixDQUMvQixJQUFNM0IsRUFBUzRCLEVBQWdCLEVBQ3pCLENBQUMsQ0FBRSxTQUFBekIsQ0FBUyxDQUFDLEVBQUkwQixHQUFrQixFQUd6QyxPQUFPekIsR0FBb0IsQ0FBRSxPQUFBSixFQUFRLFNBQUFHLEVBQVUsTUFGakMsQ0FBRSxXQUFZLENBQUMsRUFBRyxJQUFLLFVBQVcsQ0FFSyxDQUFDLENBY3hELENBRUEsU0FBU3JCLEVBQWFILEVBQXFFLENBQ3pGLEdBQU0sQ0FBQ21ELEVBQVFDLENBQU0sRUFBSXBELEVBRXpCLE1BQU8sQ0FDTCxXQUFZbUQsRUFBTyxXQUFXLE9BQU9DLEVBQU8sVUFBVSxFQUN0RCxJQUFLLEdBQUdELEVBQU8sR0FBRztBQUFBLEVBQU1DLEVBQU8sR0FBRyxFQUNwQyxDQUNGIiwKICAibmFtZXMiOiBbImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIk1ZU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEEiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiZ2V0TXlTUUxCdWlsZGVyIiwgInJlcXVpcmVtZW50cyIsICJnZXRCdWlsZGVyIiwgIk15c3FsQWRhcHRlciIsICJNeXNxbFF1ZXJ5Q29tcGlsZXIiLCAiZ2V0RGVsZXRlUXVlcnkiLCAiZGV0YWlscyIsICJyZXF1aXJlbWVudHMiLCAicm93cyIsICJjb2x1bW5zIiwgInRhYmxlTmFtZSIsICJidWlsZGVyIiwgImdldE15U1FMQnVpbGRlciIsICJjb21waWxlIiwgImFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzIiwgImdldEluc2VydFF1ZXJ5IiwgImFwcGx5VHJhbnNmb3JtYXRpb25zIiwgImdldEluc2VydFJlZmV0Y2hRdWVyeSIsICJjcml0ZXJpYSIsICJnZXRDdXJyZW50VGltZXN0YW1wTWlsbGlzIiwgImdldFVwZGF0ZVJlZmV0Y2hRdWVyeSIsICJjaGFuZ2VzIiwgInJvdyIsICJnZXRTZWxlY3RRdWVyeSIsICJmaWx0ZXIiLCAicGFnZUluZGV4IiwgInBhZ2VTaXplIiwgInNvcnRPcmRlciIsICJmaWx0ZXJFeHByZXNzaW9uIiwgImdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24iLCAiQUdHX05BTUUiLCAiQ09VTlRfUkVGIiwgImNvdW50UXVlcnkiLCAiZWIiLCAic3FsIiwgImpiIiwgInFiIiwgIml0ZW0iLCAibW9ja1NlbGVjdFF1ZXJ5IiwgImdldFVwZGF0ZVF1ZXJ5IiwgInNjaGVtYSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJqc29uQnVpbGRPYmplY3QiLCAib2JqIiwgInNxbCIsICJrIiwgImdldFRhYmxlc1F1ZXJ5IiwgInJlcXVpcmVtZW50cyIsICJkYXRhYmFzZSIsICJzcWwiLCAiY29sdW1uc1F1ZXJ5IiwgImdldE15U1FMQnVpbGRlciIsICJqYiIsICJlYiIsICJjb21waWxlIiwgImpzb25CdWlsZE9iamVjdCIsICJtb2NrVGFibGVzUXVlcnkiLCAiZ2V0VGltZXpvbmVRdWVyeSIsICJidWlsZGVyIiwgInNlc3Npb25UeiIsICJtb2NrVGltZXpvbmVRdWVyeSIsICJjcmVhdGVNeVNRTEFkYXB0ZXIiLCAicmVxdWlyZW1lbnRzIiwgImV4ZWN1dG9yIiwgIm90aGVyUmVxdWlyZW1lbnRzIiwgImRldGFpbHMiLCAib3B0aW9ucyIsICJxdWVyeSIsICJnZXREZWxldGVRdWVyeSIsICJlcnJvciIsICJjcmVhdGVBZGFwdGVyRXJyb3IiLCAicm93cyIsICJ0YWJsZSIsICJjb2x1bW5zIiwgImF1dG9pbmNyZW1lbnRDb2x1bW4iLCAiY29sdW1uIiwgImZpbHRlck9iamVjdHMiLCAicm93IiwgImluZmVyRmlsdGVyT2JqZWN0IiwgImhhc1BhcnRpYWxGaWx0ZXJPYmplY3RzIiwgImZpbHRlck9iamVjdCIsICJmaWx0ZXJWYWx1ZXMiLCAidmFsdWUiLCAiZ2V0SW5zZXJ0UXVlcnkiLCAiaW5zZXJ0UXVlcnkiLCAicmVmZXRjaFF1ZXJ5IiwgImdldEluc2VydFJlZmV0Y2hRdWVyeSIsICJzZXF1ZW5jZSIsICJpbnNlcnRFcnJvciIsICJtYXliZVJlZmV0Y2hSZXN1bHQiLCAiam9pblNlcXVlbmNlIiwgInJlZmV0Y2hFcnJvciIsICJyZWZldGNoUmVzdWx0cyIsICJyZXN1bHRzIiwgInJlc3VsdCIsICJhdXRvaW5jcmVtZW50Q29sdW1uTmFtZSIsICJhY2MiLCAiY29sdW1uTmFtZSIsICJyZWZldGNoZWRSb3ciLCAiaW5zZXJ0ZWRSb3dzIiwgImVycm9ycyIsICJpIiwgImluZGV4IiwgInRhYmxlc1F1ZXJ5IiwgImdldFRhYmxlc1F1ZXJ5IiwgInRpbWV6b25lUXVlcnkiLCAiZ2V0VGltZXpvbmVRdWVyeSIsICJ0YWJsZXNFcnJvciIsICJ0YWJsZXMiLCAidGltZXpvbmVFcnJvciIsICJ0aW1lem9uZXMiLCAidGltZXpvbmUiLCAiY3JlYXRlSW50cm9zcGVjdGlvbiIsICJnZXRTZWxlY3RRdWVyeSIsICJ1cGRhdGVRdWVyeSIsICJnZXRVcGRhdGVRdWVyeSIsICJnZXRVcGRhdGVSZWZldGNoUXVlcnkiLCAidXBkYXRlRXJyb3IiLCAicmVmZXRjaFJlc3VsdCIsICJhcmdzIiwgInNjaGVtYXMiLCAidGFibGVOYW1lIiwgInNjaGVtYSIsICJjb2x1bW5zUmVjb3JkIiwgImEiLCAiYiIsICJkYXRhdHlwZSIsICJkZWZhdWx0VmFsdWUiLCAiaW5kZXhPZlBhcmVudGhlc2lzIiwgInN0cmlwcGVkRGF0YVR5cGUiLCAiaXNBdXRvaW5jcmVtZW50IiwgImlzQ29tcHV0ZWQiLCAibnVsbGFibGUiLCAiTVlTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQSIsICJmaWx0ZXJPcGVyYXRvcnMiLCAibW9ja0ludHJvc3BlY3QiLCAibW9ja1RhYmxlc1F1ZXJ5IiwgIm1vY2tUaW1lem9uZVF1ZXJ5IiwgInF1ZXJ5MCIsICJxdWVyeTEiXQp9Cg==
|