@prisma/studio-core-licensed 0.0.0-dev.202511180328 → 0.0.0-dev.202511180420

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/{chunk-OTK4ZF2W.js → chunk-24UZSKGU.js} +1 -1
  2. package/dist/chunk-NQGSK3IM.js +10 -0
  3. package/dist/chunk-RYYSZZYL.js +10 -0
  4. package/dist/data/accelerate/index.d.cts +1 -1
  5. package/dist/data/accelerate/index.d.ts +1 -1
  6. package/dist/data/bff/index.d.cts +1 -1
  7. package/dist/data/bff/index.d.ts +1 -1
  8. package/dist/data/index.d.cts +1 -1
  9. package/dist/data/index.d.ts +1 -1
  10. package/dist/data/mysql-core/index.cjs +2 -2
  11. package/dist/data/mysql-core/index.d.cts +9 -3
  12. package/dist/data/mysql-core/index.d.ts +9 -3
  13. package/dist/data/mysql-core/index.js +2 -2
  14. package/dist/data/mysql2/index.cjs +2 -2
  15. package/dist/data/mysql2/index.d.cts +1 -1
  16. package/dist/data/mysql2/index.d.ts +1 -1
  17. package/dist/data/mysql2/index.js +1 -1
  18. package/dist/data/node-sqlite/index.d.cts +1 -1
  19. package/dist/data/node-sqlite/index.d.ts +1 -1
  20. package/dist/data/pglite/index.cjs +1 -1
  21. package/dist/data/pglite/index.d.cts +1 -1
  22. package/dist/data/pglite/index.d.ts +1 -1
  23. package/dist/data/pglite/index.js +1 -1
  24. package/dist/data/postgres-core/index.cjs +1 -1
  25. package/dist/data/postgres-core/index.d.cts +1 -1
  26. package/dist/data/postgres-core/index.d.ts +1 -1
  27. package/dist/data/postgres-core/index.js +1 -1
  28. package/dist/data/postgresjs/index.cjs +2 -2
  29. package/dist/data/postgresjs/index.d.cts +1 -1
  30. package/dist/data/postgresjs/index.d.ts +1 -1
  31. package/dist/data/postgresjs/index.js +1 -1
  32. package/dist/data/ppg/index.d.cts +1 -1
  33. package/dist/data/ppg/index.d.ts +1 -1
  34. package/dist/data/sqlite-core/index.cjs +1 -1
  35. package/dist/data/sqlite-core/index.d.cts +1 -1
  36. package/dist/data/sqlite-core/index.d.ts +1 -1
  37. package/dist/data/sqlite-core/index.js +1 -1
  38. package/dist/{index-2horhMcs.d.ts → index-CV9DQF9a.d.cts} +5 -2
  39. package/dist/{index-2horhMcs.d.cts → index-CV9DQF9a.d.ts} +5 -2
  40. package/dist/metafile-cjs.json +1 -1
  41. package/dist/metafile-esm.json +1 -1
  42. package/dist/ui/index.cjs +1 -1
  43. package/dist/ui/index.d.cts +1 -1
  44. package/dist/ui/index.d.ts +1 -1
  45. package/dist/ui/index.js +1 -1
  46. package/package.json +1 -1
  47. package/dist/chunk-AHIV4VYN.js +0 -10
  48. package/dist/chunk-CM36Z3XQ.js +0 -10
@@ -1,7 +1,9 @@
1
- import { d as AdapterRequirements, A as Adapter, T as Table, F as FilterOperator, Q as Query, f as AdapterDeleteDetails, B as BuilderRequirements, g as AdapterInsertDetails, e as AdapterQueryDetails, h as AdapterUpdateDetails } from '../../index-2horhMcs.cjs';
1
+ import { d as AdapterRequirements, S as SequenceExecutor, A as Adapter, T as Table, F as FilterOperator, Q as Query, f as AdapterDeleteDetails, B as BuilderRequirements, g as AdapterInsertDetails, h as AdapterUpdateDetails, e as AdapterQueryDetails } from '../../index-CV9DQF9a.cjs';
2
2
  import * as kysely from 'kysely';
3
3
 
4
- type MySQLAdapterRequirements = AdapterRequirements;
4
+ type MySQLAdapterRequirements = Omit<AdapterRequirements, "executor"> & {
5
+ executor: SequenceExecutor;
6
+ };
5
7
  declare function createMySQLAdapter(requirements: MySQLAdapterRequirements): Adapter;
6
8
  /**
7
9
  * For testing purposes.
@@ -18,6 +20,10 @@ declare function mockIntrospect(): {
18
20
 
19
21
  declare function getDeleteQuery(details: AdapterDeleteDetails, requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<kysely.DeleteResult>;
20
22
  declare function getInsertQuery(_details: AdapterInsertDetails, _requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): void;
23
+ declare function getUpdateRefetchQuery(details: AdapterUpdateDetails, requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<{
24
+ [x: string]: unknown;
25
+ __ps_updated_at__: string | number;
26
+ }>;
21
27
  declare function getSelectQuery(details: AdapterQueryDetails, requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<{
22
28
  [x: string]: unknown;
23
29
  __ps_count__: `${bigint}`;
@@ -144,4 +150,4 @@ declare function mockTimezoneQuery(): [{
144
150
 
145
151
  declare function getCancelQuery(threadId: unknown): Query<unknown>;
146
152
 
147
- export { type MySQLAdapterRequirements, createMySQLAdapter, getCancelQuery, getDeleteQuery, getInsertQuery, getSelectQuery, getTablesQuery, getTimezoneQuery, getUpdateQuery, mockIntrospect, mockSelectQuery, mockTablesQuery, mockTimezoneQuery };
153
+ export { type MySQLAdapterRequirements, createMySQLAdapter, getCancelQuery, getDeleteQuery, getInsertQuery, getSelectQuery, getTablesQuery, getTimezoneQuery, getUpdateQuery, getUpdateRefetchQuery, mockIntrospect, mockSelectQuery, mockTablesQuery, mockTimezoneQuery };
@@ -1,7 +1,9 @@
1
- import { d as AdapterRequirements, A as Adapter, T as Table, F as FilterOperator, Q as Query, f as AdapterDeleteDetails, B as BuilderRequirements, g as AdapterInsertDetails, e as AdapterQueryDetails, h as AdapterUpdateDetails } from '../../index-2horhMcs.js';
1
+ import { d as AdapterRequirements, S as SequenceExecutor, A as Adapter, T as Table, F as FilterOperator, Q as Query, f as AdapterDeleteDetails, B as BuilderRequirements, g as AdapterInsertDetails, h as AdapterUpdateDetails, e as AdapterQueryDetails } from '../../index-CV9DQF9a.js';
2
2
  import * as kysely from 'kysely';
3
3
 
4
- type MySQLAdapterRequirements = AdapterRequirements;
4
+ type MySQLAdapterRequirements = Omit<AdapterRequirements, "executor"> & {
5
+ executor: SequenceExecutor;
6
+ };
5
7
  declare function createMySQLAdapter(requirements: MySQLAdapterRequirements): Adapter;
6
8
  /**
7
9
  * For testing purposes.
@@ -18,6 +20,10 @@ declare function mockIntrospect(): {
18
20
 
19
21
  declare function getDeleteQuery(details: AdapterDeleteDetails, requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<kysely.DeleteResult>;
20
22
  declare function getInsertQuery(_details: AdapterInsertDetails, _requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): void;
23
+ declare function getUpdateRefetchQuery(details: AdapterUpdateDetails, requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<{
24
+ [x: string]: unknown;
25
+ __ps_updated_at__: string | number;
26
+ }>;
21
27
  declare function getSelectQuery(details: AdapterQueryDetails, requirements?: Omit<BuilderRequirements, "Adapter" | "QueryCompiler">): Query<{
22
28
  [x: string]: unknown;
23
29
  __ps_count__: `${bigint}`;
@@ -144,4 +150,4 @@ declare function mockTimezoneQuery(): [{
144
150
 
145
151
  declare function getCancelQuery(threadId: unknown): Query<unknown>;
146
152
 
147
- export { type MySQLAdapterRequirements, createMySQLAdapter, getCancelQuery, getDeleteQuery, getInsertQuery, getSelectQuery, getTablesQuery, getTimezoneQuery, getUpdateQuery, mockIntrospect, mockSelectQuery, mockTablesQuery, mockTimezoneQuery };
153
+ export { type MySQLAdapterRequirements, createMySQLAdapter, getCancelQuery, getDeleteQuery, getInsertQuery, getSelectQuery, getTablesQuery, getTimezoneQuery, getUpdateQuery, getUpdateRefetchQuery, mockIntrospect, mockSelectQuery, mockTablesQuery, mockTimezoneQuery };
@@ -6,5 +6,5 @@ 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 I}from"../../chunk-32BUC7NR.js";import{a as F}from"../../chunk-ZUEQ555M.js";import{a as y}from"../../chunk-OTK4ZF2W.js";import{i as m,n as M,o as L,p as S,r as A,s as b,u as B,v as O}from"../../chunk-A6CVKSUD.js";import{e as a}from"../../chunk-GDQBQ7MK.js";a();a();a();var k={bigint:{group:"numeric"},binary:{group:"string"},bit:{group:"raw"},blob:{group:"string"},char:{group:"string"},"char binary":{group:"string"},date:{group:"datetime"},datetime:{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:{group:"time"},timestamp:{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:{group:"numeric"}};a();a();function g(e){return S({...e,Adapter:L,QueryCompiler:M})}function C(e,r){let{rows:o,table:{columns:i,name:n}}=e,t=g(r);return A(t.deleteFrom(n).$call(b(o,i)))}function X(e,r){throw new Error("Not implemented")}function h(e,r){let{filter:o={after:"and",filters:[],kind:"FilterGroup"},pageIndex:i,pageSize:n,sortOrder:t,table:{columns:s,name:l}}=e,c=g(r),u=O(o.filters,s),_=c.selectFrom(l).where(u).select(E=>E.cast(E.fn.coalesce(E.fn.countAll(),m.lit(0)),"text").as("value"));return A(c.with("count",()=>_).selectFrom([l,"count"]).where(u).select(Object.keys(s)).select(m.ref("count.value").as("__ps_count__")).$call(E=>t.reduce((p,d)=>p.orderBy(d.column,d.direction),E)).limit(n).offset(m.lit(BigInt(i)*BigInt(n))))}function J(){return[]}function Z(e,r){let{changes:o,row:i,table:{columns:n,name:t,schema:s}}=e,l=g(r);return A(l.withSchema(s).updateTable(t).set(B("update",o,n)).$call(b([i],n)))}a();a();function Q(e){return m`(select cast(coalesce(json_arrayagg(json_object(${m.join(j(e.toOperationNode(),"agg"))})), '[]') as json) from ${e} as agg)`}function j(e,r){try{return I(e,r)}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 w(e){return A(g(e).selectFrom("information_schema.tables as t").where("t.TABLE_SCHEMA","=",m`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(r=>Q(r.selectFrom("information_schema.columns as c").leftJoin("information_schema.KEY_COLUMN_USAGE as kcu",o=>o.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)).whereRef("c.TABLE_SCHEMA","=","t.TABLE_SCHEMA").whereRef("c.TABLE_NAME","=","t.TABLE_NAME").select(["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"]).select(o=>[o("c.EXTRA","=","auto_increment").as("autoincrement"),o("c.EXTRA","in",["on update CURRENT_TIMESTAMP","STORED GENERATED","VIRTUAL GENERATED"]).as("computed"),o("c.COLUMN_KEY","=","PRI").as("pk"),o("c.IS_NULLABLE","=","YES").as("nullable")])).as("columns")).orderBy("t.TABLE_SCHEMA").orderBy("t.TABLE_NAME").orderBy("t.TABLE_TYPE"))}function D(){return[{columns:[{autoincrement:1,computed:0,datatype:"int",fk_column:null,fk_table:null,name:"id",nullable:0,pk:1,position:1},{autoincrement:0,computed:0,datatype:"binary(16)",fk_column:null,fk_table:null,name:"uuid",nullable:1,pk:0,position:2},{autoincrement:0,computed:0,datatype:"varchar(255)",fk_column:null,fk_table:null,name:"name",nullable:1,pk:0,position:3},{autoincrement:0,computed:1,datatype:"text",fk_column:null,fk_table:null,name:"id_name",nullable:1,pk:0,position:4}],name:"animals",schema:"studio",type:"BASE TABLE"},{columns:[{autoincrement:1,computed:0,datatype:"int",fk_column:null,fk_table:null,name:"id",nullable:0,pk:1,position:1},{autoincrement:0,computed:0,datatype:"timestamp",fk_column:null,fk_table:null,name:"created_at",nullable:1,pk:0,position:2},{autoincrement:0,computed:0,datatype:"enum('admin','maintainer','member')",fk_column:null,fk_table:null,name:"role",nullable:0,pk:0,position:3},{autoincrement:0,computed:0,datatype:"int",fk_column:"id",fk_table:"animals",name:"animal_id",nullable:1,pk:0,position:4}],name:"users",schema:"studio",type:"BASE TABLE"}]}function x(e){let r=g(e),o=m`@@session.time_zone`;return A(r.selectNoFrom(r.case().when(o,"=","SYSTEM").then(m`@@system_time_zone`).else(o).end().as("timezone")).$narrowType())}function U(){return[{timezone:"UTC"}]}function Ae(e){let{executor:r,...o}=e;return{async delete(i,n){try{let t=C(i,o),[s]=await r.execute(t,n);return s?y({error:s,query:t}):[null,{...i,query:t}]}catch(t){return y({error:t})}},insert(i,n){throw new Error("Method not implemented.")},async introspect(i){try{let n=w(e),t=x(e),[[s,l],[c,u]]=await Promise.all([r.execute(n,i),r.execute(t,i)]);if(s)return y({error:s,query:n});if(c)return y({error:c,query:t});let _=u[0]?.timezone;return _?[null,q({query:n,tables:l,timezone:_})]:y({error:new Error("Timezone not found"),query:t})}catch(n){return y({error:n})}},async query(i,n){try{let t=h(i,o),[s,l]=await r.execute(t,n);return s?y({error:s,query:t}):[null,{filteredRowCount:l[0]?.__ps_count__||"0",rows:l,query:t}]}catch(t){return y({error:t})}},update(i,n){throw new Error("Method not implemented.")}}}function q(e){let{query:r,tables:o,timezone:i}=e;return o.reduce((n,t)=>{let{schemas:s}=n,{columns:l,name:c,schema:u}=t,_=l.sort((E,p)=>E.position-p.position).reduce((E,p)=>{let{datatype:d,name:R}=p,N=d.indexOf("("),T=(N>-1?d.substring(0,N):d).trim().toLowerCase();return{...E,[R]:{datatype:{...k[T]||{group:"raw"},isArray:!1,isNative:!0,name:T,options:T==="enum"?d.slice(6,-2).split("','"):[],schema:u},fkColumn:p.fk_column,fkSchema:u,fkTable:p.fk_table,isComputed:!!p.computed,isInPrimaryKey:!!p.pk,name:R,nullable:!!p.nullable,schema:u,table:c}}},{});return s[u]===void 0&&(s[u]={name:u,tables:{}}),s[u].tables[c]={columns:_,name:c,schema:u},n},{filterOperators:P,query:r,schemas:{},timezone:i})}var P=["=","!=",">",">=","<","<=","is","is not","like","not like"];function ge(){let e=D(),[{timezone:r}]=U();return q({tables:e,timezone:r,query:{parameters:[],sql:"<mocked>"}})}export{Ae as createMySQLAdapter,F as getCancelQuery,C as getDeleteQuery,X as getInsertQuery,h as getSelectQuery,w as getTablesQuery,x as getTimezoneQuery,Z as getUpdateQuery,ge as mockIntrospect,J as mockSelectQuery,D as mockTablesQuery,U as mockTimezoneQuery};
10
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vZGF0YS9teXNxbC1jb3JlL2luZGV4LnRzIiwgIi4uLy4uLy4uL2RhdGEvbXlzcWwtY29yZS9hZGFwdGVyLnRzIiwgIi4uLy4uLy4uL2RhdGEvbXlzcWwtY29yZS9kYXRhdHlwZS50cyIsICIuLi8uLi8uLi9kYXRhL215c3FsLWNvcmUvZG1sLnRzIiwgIi4uLy4uLy4uL2RhdGEvbXlzcWwtY29yZS9idWlsZGVyLnRzIiwgIi4uLy4uLy4uL2RhdGEvbXlzcWwtY29yZS9pbnRyb3NwZWN0aW9uLnRzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vaGVscGVycy9teXNxbC5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0ICogZnJvbSBcIi4vYWRhcHRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZG1sXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pbnRyb3NwZWN0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsaXR5XCI7XG4iLCAiaW1wb3J0IHtcbiAgdHlwZSBBZGFwdGVyLFxuICB0eXBlIEFkYXB0ZXJEZWxldGVSZXN1bHQsXG4gIHR5cGUgQWRhcHRlckVycm9yLFxuICB0eXBlIEFkYXB0ZXJJbnNlcnRSZXN1bHQsXG4gIHR5cGUgQWRhcHRlckludHJvc3BlY3RSZXN1bHQsXG4gIHR5cGUgQWRhcHRlclF1ZXJ5UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJSZXF1aXJlbWVudHMsXG4gIHR5cGUgQWRhcHRlclVwZGF0ZVJlc3VsdCxcbiAgdHlwZSBDb2x1bW4sXG4gIGNyZWF0ZUFkYXB0ZXJFcnJvcixcbiAgdHlwZSBGaWx0ZXJPcGVyYXRvcixcbiAgdHlwZSBUYWJsZSxcbn0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUXVlcnksIFF1ZXJ5UmVzdWx0IH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEVpdGhlciB9IGZyb20gXCIuLi90eXBlLXV0aWxzXCI7XG5pbXBvcnQgeyBNWVNRTF9EQVRBX1RZUEVTX1RPX01FVEFEQVRBIH0gZnJvbSBcIi4vZGF0YXR5cGVcIjtcbmltcG9ydCB7IGdldERlbGV0ZVF1ZXJ5LCBnZXRTZWxlY3RRdWVyeSB9IGZyb20gXCIuL2RtbFwiO1xuaW1wb3J0IHsgZ2V0VGFibGVzUXVlcnksIGdldFRpbWV6b25lUXVlcnksIG1vY2tUYWJsZXNRdWVyeSwgbW9ja1RpbWV6b25lUXVlcnkgfSBmcm9tIFwiLi9pbnRyb3NwZWN0aW9uXCI7XG5cbmV4cG9ydCB0eXBlIE15U1FMQWRhcHRlclJlcXVpcmVtZW50cyA9IEFkYXB0ZXJSZXF1aXJlbWVudHM7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNeVNRTEFkYXB0ZXIocmVxdWlyZW1lbnRzOiBNeVNRTEFkYXB0ZXJSZXF1aXJlbWVudHMpOiBBZGFwdGVyIHtcbiAgY29uc3QgeyBleGVjdXRvciwgLi4ub3RoZXJSZXF1aXJlbWVudHMgfSA9IHJlcXVpcmVtZW50cztcblxuICByZXR1cm4ge1xuICAgIGFzeW5jIGRlbGV0ZShkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyRGVsZXRlUmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXREZWxldGVRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG5cbiAgICAgICAgY29uc3QgW2Vycm9yXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgLi4uZGV0YWlscywgcXVlcnkgfV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBpbnNlcnQoX2RldGFpbHMsIF9vcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW5zZXJ0UmVzdWx0Pj4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfSxcblxuICAgIGFzeW5jIGludHJvc3BlY3Qob3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckludHJvc3BlY3RSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0YWJsZXNRdWVyeSA9IGdldFRhYmxlc1F1ZXJ5KHJlcXVpcmVtZW50cyk7XG4gICAgICAgIGNvbnN0IHRpbWV6b25lUXVlcnkgPSBnZXRUaW1lem9uZVF1ZXJ5KHJlcXVpcmVtZW50cyk7XG5cbiAgICAgICAgY29uc3QgW1t0YWJsZXNFcnJvciwgdGFibGVzXSwgW3RpbWV6b25lRXJyb3IsIHRpbWV6b25lc11dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUodGFibGVzUXVlcnksIG9wdGlvbnMpLFxuICAgICAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUodGltZXpvbmVRdWVyeSwgb3B0aW9ucyksXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGlmICh0YWJsZXNFcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogdGFibGVzRXJyb3IsIHF1ZXJ5OiB0YWJsZXNRdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aW1lem9uZUVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiB0aW1lem9uZUVycm9yLCBxdWVyeTogdGltZXpvbmVRdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbWV6b25lID0gdGltZXpvbmVzWzBdPy50aW1lem9uZTtcblxuICAgICAgICBpZiAoIXRpbWV6b25lKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBuZXcgRXJyb3IoXCJUaW1lem9uZSBub3QgZm91bmRcIiksIHF1ZXJ5OiB0aW1lem9uZVF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCBjcmVhdGVJbnRyb3NwZWN0aW9uKHsgcXVlcnk6IHRhYmxlc1F1ZXJ5LCB0YWJsZXMsIHRpbWV6b25lIH0pXTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHF1ZXJ5KGRldGFpbHMsIG9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJRdWVyeVJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0U2VsZWN0UXVlcnkoZGV0YWlscywgb3RoZXJSZXF1aXJlbWVudHMpO1xuXG4gICAgICAgIGNvbnN0IFtlcnJvciwgcmVzdWx0c10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3IsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IGZpbHRlcmVkUm93Q291bnQ6IHJlc3VsdHNbMF0/Ll9fcHNfY291bnRfXyB8fCBcIjBcIiwgcm93czogcmVzdWx0cywgcXVlcnkgfV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgcHJvcGVybHlcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlKF9kZXRhaWxzLCBfb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlclVwZGF0ZVJlc3VsdD4+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUludHJvc3BlY3Rpb24oYXJnczoge1xuICBxdWVyeTogUXVlcnk7XG4gIHRhYmxlczogUXVlcnlSZXN1bHQ8dHlwZW9mIGdldFRhYmxlc1F1ZXJ5PjtcbiAgdGltZXpvbmU6IHN0cmluZztcbn0pOiBBZGFwdGVySW50cm9zcGVjdFJlc3VsdCB7XG4gIGNvbnN0IHsgcXVlcnksIHRhYmxlcywgdGltZXpvbmUgfSA9IGFyZ3M7XG5cbiAgcmV0dXJuIHRhYmxlcy5yZWR1Y2UoXG4gICAgKHJlc3VsdCwgdGFibGUpID0+IHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hcyB9ID0gcmVzdWx0O1xuICAgICAgY29uc3QgeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUsIHNjaGVtYSB9ID0gdGFibGU7XG5cbiAgICAgIGNvbnN0IGNvbHVtbnNSZWNvcmQgPSBjb2x1bW5zXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnBvc2l0aW9uIC0gYi5wb3NpdGlvbilcbiAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAoY29sdW1ucywgY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGF0eXBlLCBuYW1lOiBjb2x1bW5OYW1lIH0gPSBjb2x1bW47XG5cbiAgICAgICAgICAgIGNvbnN0IGluZGV4T2ZQYXJlbnRoZXNpcyA9IGRhdGF0eXBlLmluZGV4T2YoXCIoXCIpO1xuICAgICAgICAgICAgY29uc3Qgc3RyaXBwZWREYXRhVHlwZSA9IChpbmRleE9mUGFyZW50aGVzaXMgPiAtMSA/IGRhdGF0eXBlLnN1YnN0cmluZygwLCBpbmRleE9mUGFyZW50aGVzaXMpIDogZGF0YXR5cGUpXG4gICAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNvbHVtbnMsXG4gICAgICAgICAgICAgIFtjb2x1bW5OYW1lXToge1xuICAgICAgICAgICAgICAgIGRhdGF0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAuLi4oTVlTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQVtzdHJpcHBlZERhdGFUeXBlXSB8fCB7IGdyb3VwOiBcInJhd1wiIH0pLFxuICAgICAgICAgICAgICAgICAgaXNBcnJheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBpc05hdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IHN0cmlwcGVkRGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgICBvcHRpb25zOlxuICAgICAgICAgICAgICAgICAgICBzdHJpcHBlZERhdGFUeXBlID09PSBcImVudW1cIiA/IGRhdGF0eXBlLnNsaWNlKGBlbnVtKCdgLmxlbmd0aCwgLWAnKWAubGVuZ3RoKS5zcGxpdChgJywnYCkgOiBbXSxcbiAgICAgICAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZrQ29sdW1uOiBjb2x1bW4uZmtfY29sdW1uLFxuICAgICAgICAgICAgICAgIGZrU2NoZW1hOiBzY2hlbWEsXG4gICAgICAgICAgICAgICAgZmtUYWJsZTogY29sdW1uLmZrX3RhYmxlLFxuICAgICAgICAgICAgICAgIGlzQ29tcHV0ZWQ6IEJvb2xlYW4oY29sdW1uLmNvbXB1dGVkKSxcbiAgICAgICAgICAgICAgICBpc0luUHJpbWFyeUtleTogQm9vbGVhbihjb2x1bW4ucGspLFxuICAgICAgICAgICAgICAgIG5hbWU6IGNvbHVtbk5hbWUsXG4gICAgICAgICAgICAgICAgbnVsbGFibGU6IEJvb2xlYW4oY29sdW1uLm51bGxhYmxlKSxcbiAgICAgICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICAgICAgdGFibGU6IHRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgfSBhcyBjb25zdCBzYXRpc2ZpZXMgQ29sdW1uLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHt9IGFzIFRhYmxlW1wiY29sdW1uc1wiXSxcbiAgICAgICAgKTtcblxuICAgICAgaWYgKHNjaGVtYXNbc2NoZW1hXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNjaGVtYXNbc2NoZW1hXSA9IHsgbmFtZTogc2NoZW1hLCB0YWJsZXM6IHt9IH07XG4gICAgICB9XG5cbiAgICAgIHNjaGVtYXNbc2NoZW1hXS50YWJsZXNbdGFibGVOYW1lXSA9IHsgY29sdW1uczogY29sdW1uc1JlY29yZCwgbmFtZTogdGFibGVOYW1lLCBzY2hlbWEgfTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHsgZmlsdGVyT3BlcmF0b3JzLCBxdWVyeSwgc2NoZW1hczoge30sIHRpbWV6b25lIH0gc2F0aXNmaWVzIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0IGFzIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0LFxuICApO1xufVxuXG5jb25zdCBmaWx0ZXJPcGVyYXRvcnMgPSBbXG4gIFwiPVwiLFxuICBcIiE9XCIsXG4gIFwiPlwiLFxuICBcIj49XCIsXG4gIFwiPFwiLFxuICBcIjw9XCIsXG4gIFwiaXNcIixcbiAgXCJpcyBub3RcIixcbiAgXCJsaWtlXCIsXG4gIFwibm90IGxpa2VcIixcbl0gc2F0aXNmaWVzIEZpbHRlck9wZXJhdG9yW107XG5cbi8qKlxuICogRm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrSW50cm9zcGVjdCgpIHtcbiAgY29uc3QgdGFibGVzID0gbW9ja1RhYmxlc1F1ZXJ5KCk7XG4gIGNvbnN0IFt7IHRpbWV6b25lIH1dID0gbW9ja1RpbWV6b25lUXVlcnkoKTtcbiAgY29uc3QgcXVlcnkgPSB7IHBhcmFtZXRlcnM6IFtdLCBzcWw6IFwiPG1vY2tlZD5cIiB9IGFzIFF1ZXJ5O1xuXG4gIHJldHVybiBjcmVhdGVJbnRyb3NwZWN0aW9uKHsgdGFibGVzLCB0aW1lem9uZSwgcXVlcnkgfSkgYXMge1xuICAgIC8vIGJlc3QgZWZmb3J0LCBubyBuZWVkIGdvIG92ZXJib2FyZC5cbiAgICBzY2hlbWFzOiB7XG4gICAgICBbSyBpbiAodHlwZW9mIHRhYmxlcylbbnVtYmVyXVtcInNjaGVtYVwiXV06IHtcbiAgICAgICAgbmFtZTogSztcbiAgICAgICAgdGFibGVzOiB7XG4gICAgICAgICAgW1QgaW4gKHR5cGVvZiB0YWJsZXMpW251bWJlcl1bXCJuYW1lXCJdXTogVGFibGU7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH07XG4gICAgdGltZXpvbmU6IHR5cGVvZiB0aW1lem9uZTtcbiAgICBmaWx0ZXJPcGVyYXRvcnM6IEZpbHRlck9wZXJhdG9yW107XG4gICAgcXVlcnk6IFF1ZXJ5O1xuICB9IHNhdGlzZmllcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdDtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IERhdGFUeXBlIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcblxuZXhwb3J0IGNvbnN0IE1ZU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEE6IFJlY29yZDxzdHJpbmcsIFBpY2s8RGF0YVR5cGUsIFwiZ3JvdXBcIj4+ID0ge1xuICBiaWdpbnQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGJpbmFyeToge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBiaXQ6IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgYmxvYjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBjaGFyOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIFwiY2hhciBiaW5hcnlcIjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBkYXRlOiB7XG4gICAgZ3JvdXA6IFwiZGF0ZXRpbWVcIixcbiAgfSxcbiAgZGF0ZXRpbWU6IHtcbiAgICBncm91cDogXCJkYXRldGltZVwiLFxuICB9LFxuICBkZWM6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGRlY2ltYWw6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGRvdWJsZToge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgXCJkb3VibGUgcHJlY2lzaW9uXCI6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGVudW06IHtcbiAgICBncm91cDogXCJlbnVtXCIsXG4gIH0sXG4gIGZpeGVkOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBmbG9hdDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgZ2VvbWV0cnk6IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgZ2VvbWV0cnljb2xsZWN0aW9uOiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIGludDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgaW50ZWdlcjoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAganNvbjoge1xuICAgIGdyb3VwOiBcImpzb25cIixcbiAgfSxcbiAgbGluZXN0cmluZzoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBsb25nOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIFwibG9uZyB2YXJjaGFyXCI6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgbG9uZ2Jsb2I6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgbG9uZ3RleHQ6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgbG9uZ3ZhcmJpbmFyeToge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBsb25ndmFyY2hhcjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBtZWRpdW1ibG9iOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIG1lZGl1bWludDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgbWVkaXVtdGV4dDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBtdWx0aWxpbmVzdHJpbmc6IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgbXVsdGlwb2ludDoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBtdWx0aXBvbHlnb246IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgbnVtZXJpYzoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgcG9pbnQ6IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgcG9seWdvbjoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICByZWFsOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICAvKipcbiAgICogaHR0cHM6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vOS41L2VuL3NldC5odG1sXG4gICAqL1xuICBzZXQ6IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgc21hbGxpbnQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIHRleHQ6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgdGltZToge1xuICAgIGdyb3VwOiBcInRpbWVcIixcbiAgfSxcbiAgdGltZXN0YW1wOiB7XG4gICAgZ3JvdXA6IFwiZGF0ZXRpbWVcIixcbiAgfSxcbiAgdGlueWJsb2I6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgdGlueWludDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgdGlueXRleHQ6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgdmFyYmluYXJ5OiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIHZhcmNoYXI6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgXCJ2YXJjaGFyIGJpbmFyeVwiOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBodHRwczovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi85LjUvZW4vdmVjdG9yLmh0bWxcbiAgICovXG4gIHZlY3Rvcjoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICB5ZWFyOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxufTtcbiIsICJpbXBvcnQgeyB0eXBlIEluZmVyUmVzdWx0LCB0eXBlIFJlZmVyZW5jZUV4cHJlc3Npb24sIHNxbCB9IGZyb20gXCJreXNlbHlcIjtcblxuaW1wb3J0IHR5cGUgeyBBZGFwdGVyRGVsZXRlRGV0YWlscywgQWRhcHRlckluc2VydERldGFpbHMsIEFkYXB0ZXJRdWVyeURldGFpbHMsIEFkYXB0ZXJVcGRhdGVEZXRhaWxzIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB7XG4gIGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzLFxuICBhcHBseVRyYW5zZm9ybWF0aW9ucyxcbiAgdHlwZSBCdWlsZGVyUmVxdWlyZW1lbnRzLFxuICBjb21waWxlLFxuICBnZXRTZWxlY3RGaWx0ZXJFeHByZXNzaW9uLFxufSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB0eXBlIHsgQmlnSW50U3RyaW5nIH0gZnJvbSBcIi4uL3R5cGUtdXRpbHNcIjtcbmltcG9ydCB7IGdldE15U1FMQnVpbGRlciB9IGZyb20gXCIuL2J1aWxkZXJcIjtcbmltcG9ydCB7IG1vY2tUYWJsZXNRdWVyeSB9IGZyb20gXCIuL2ludHJvc3BlY3Rpb25cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlbGV0ZVF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyRGVsZXRlRGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgcm93cyxcbiAgICB0YWJsZTogeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUgfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldE15U1FMQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KHJlcXVpcmVtZW50cyk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoYnVpbGRlci5kZWxldGVGcm9tKHRhYmxlTmFtZSkuJGNhbGwoYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMocm93cywgY29sdW1ucykpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEluc2VydFF1ZXJ5KFxuICBfZGV0YWlsczogQWRhcHRlckluc2VydERldGFpbHMsXG4gIF9yZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIHRocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdFF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyUXVlcnlEZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHtcbiAgICBmaWx0ZXIgPSB7IGFmdGVyOiBcImFuZFwiLCBmaWx0ZXJzOiBbXSwga2luZDogXCJGaWx0ZXJHcm91cFwiIH0sXG4gICAgcGFnZUluZGV4LFxuICAgIHBhZ2VTaXplLFxuICAgIHNvcnRPcmRlcixcbiAgICB0YWJsZTogeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUgfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldE15U1FMQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KHJlcXVpcmVtZW50cyk7XG5cbiAgY29uc3QgZmlsdGVyRXhwcmVzc2lvbiA9IGdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24oZmlsdGVyLmZpbHRlcnMsIGNvbHVtbnMpO1xuXG4gIGNvbnN0IGNvdW50UXVlcnkgPSBidWlsZGVyXG4gICAgLnNlbGVjdEZyb20odGFibGVOYW1lKVxuICAgIC53aGVyZShmaWx0ZXJFeHByZXNzaW9uKVxuICAgIC5zZWxlY3QoKGViKSA9PiBlYi5jYXN0PEJpZ0ludFN0cmluZz4oZWIuZm4uY29hbGVzY2UoZWIuZm4uY291bnRBbGwoKSwgc3FsLmxpdCgwKSksIFwidGV4dFwiKS5hcyhcInZhbHVlXCIpKTtcblxuICByZXR1cm4gY29tcGlsZShcbiAgICBidWlsZGVyXG4gICAgICAud2l0aChcImNvdW50XCIsICgpID0+IGNvdW50UXVlcnkpXG4gICAgICAuc2VsZWN0RnJvbShbdGFibGVOYW1lLCBcImNvdW50XCJdKVxuICAgICAgLy8gVE9ETzogY3Vyc29yIHBhZ2luYXRpb24/XG4gICAgICAud2hlcmUoZmlsdGVyRXhwcmVzc2lvbilcbiAgICAgIC5zZWxlY3QoT2JqZWN0LmtleXMoY29sdW1ucykpXG4gICAgICAuc2VsZWN0KFxuICAgICAgICBzcWxcbiAgICAgICAgICAucmVmPEJpZ0ludFN0cmluZz4oXG4gICAgICAgICAgICBcImNvdW50LnZhbHVlXCIgc2F0aXNmaWVzIFJlZmVyZW5jZUV4cHJlc3Npb248eyBjb3VudDogSW5mZXJSZXN1bHQ8dHlwZW9mIGNvdW50UXVlcnk+W251bWJlcl0gfSwgXCJjb3VudFwiPixcbiAgICAgICAgICApXG4gICAgICAgICAgLmFzKFwiX19wc19jb3VudF9fXCIpLFxuICAgICAgKVxuICAgICAgLiRjYWxsKChxYikgPT4gc29ydE9yZGVyLnJlZHVjZSgocWIsIGl0ZW0pID0+IHFiLm9yZGVyQnkoaXRlbS5jb2x1bW4sIGl0ZW0uZGlyZWN0aW9uKSwgcWIpKVxuICAgICAgLmxpbWl0KHBhZ2VTaXplKVxuICAgICAgLy8gd2UncmUgaW5qZWN0aW5nIHRoZSBvZmZzZXQgdmFsdWUgaGVyZSB0byBhdm9pZCBzZXJpYWxpemF0aW9uIGNvbXBsZXhpdHkgKGBiaWdpbnRgIGlzIGEgbm8tZ28gZm9yIGBKU09OLnN0cmluZ2lmeWApLlxuICAgICAgLm9mZnNldChzcWwubGl0KEJpZ0ludChwYWdlSW5kZXgpICogQmlnSW50KHBhZ2VTaXplKSkpLFxuICApO1xufVxuXG4vKipcbiAqIEZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja1NlbGVjdFF1ZXJ5KCkge1xuICAvLyBUT0RPOiAuLi5cbiAgcmV0dXJuIFtdIGFzIGNvbnN0IHNhdGlzZmllcyB7XG4gICAgLy8gYmVzdCBlZmZvcnQgbm8gbmVlZCB0byBnbyBvdmVyYm9hcmRcbiAgICBbSyBpbiBSZXR1cm5UeXBlPHR5cGVvZiBtb2NrVGFibGVzUXVlcnk+WzFdW1wiY29sdW1uc1wiXVtudW1iZXJdW1wibmFtZVwiXSB8IFwiX19wc19jb3VudF9fXCJdOiB1bmtub3duO1xuICB9W107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVcGRhdGVRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlclVwZGF0ZURldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIGNoYW5nZXMsXG4gICAgcm93LFxuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSwgc2NoZW1hIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRNeVNRTEJ1aWxkZXI8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC53aXRoU2NoZW1hKHNjaGVtYSlcbiAgICAgIC51cGRhdGVUYWJsZSh0YWJsZU5hbWUpXG4gICAgICAuc2V0KGFwcGx5VHJhbnNmb3JtYXRpb25zKFwidXBkYXRlXCIsIGNoYW5nZXMsIGNvbHVtbnMpKVxuICAgICAgLiRjYWxsKGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzKFtyb3ddLCBjb2x1bW5zKSksXG4gICAgLy8gICAucmV0dXJuaW5nKE9iamVjdC5rZXlzKGNvbHVtbnMpKVxuICAgIC8vICAgLnJldHVybmluZyhnZXRDdXJyZW50VGltZXN0YW1wTWlsbGlzKCkuYXMoXCJfX3BzX3VwZGF0ZWRfYXRfX1wiKSksXG4gICk7XG59XG4iLCAiaW1wb3J0IHsgdHlwZSBLeXNlbHksIE15c3FsQWRhcHRlciwgTXlzcWxRdWVyeUNvbXBpbGVyIH0gZnJvbSBcImt5c2VseVwiO1xuXG5pbXBvcnQgeyB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsIGdldEJ1aWxkZXIgfSBmcm9tIFwiLi4vcXVlcnlcIjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBnZXRNeVNRTEJ1aWxkZXI8RGF0YWJhc2UgPSBhbnk+KFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKTogS3lzZWx5PERhdGFiYXNlPiB7XG4gIHJldHVybiBnZXRCdWlsZGVyKHsgLi4ucmVxdWlyZW1lbnRzLCBBZGFwdGVyOiBNeXNxbEFkYXB0ZXIsIFF1ZXJ5Q29tcGlsZXI6IE15c3FsUXVlcnlDb21waWxlciB9KTtcbn1cbiIsICJpbXBvcnQgeyBzcWwgfSBmcm9tIFwia3lzZWx5XCI7XG5pbXBvcnQgeyBqc29uQXJyYXlGcm9tIH0gZnJvbSBcImt5c2VseS9oZWxwZXJzL215c3FsXCI7XG5cbmltcG9ydCB7IHR5cGUgQnVpbGRlclJlcXVpcmVtZW50cywgY29tcGlsZSwgdHlwZSBRdWVyeVJlc3VsdCB9IGZyb20gXCIuLi9xdWVyeVwiO1xuaW1wb3J0IHsgZ2V0TXlTUUxCdWlsZGVyIH0gZnJvbSBcIi4vYnVpbGRlclwiO1xuXG5pbnRlcmZhY2UgRGF0YWJhc2Uge1xuICAvKiogaHR0cHM6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vOC40L2VuL2luZm9ybWF0aW9uLXNjaGVtYS1jb2x1bW5zLXRhYmxlLmh0bWwgKi9cbiAgXCJpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1uc1wiOiB7XG4gICAgVEFCTEVfU0NIRU1BOiBzdHJpbmc7XG4gICAgVEFCTEVfTkFNRTogc3RyaW5nO1xuICAgIENPTFVNTl9OQU1FOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uIHdpdGhpbiB0aGUgdGFibGUuIE9SRElOQUxfUE9TSVRJT04gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgeW91IG1pZ2h0IHdhbnQgdG8gc2F5IE9SREVSIEJZIE9SRElOQUxfUE9TSVRJT04uIFVubGlrZSBTSE9XIENPTFVNTlMsIFNFTEVDVCBmcm9tIHRoZSBDT0xVTU5TIHRhYmxlIGRvZXMgbm90IGhhdmUgYXV0b21hdGljIG9yZGVyaW5nLiAqL1xuICAgIE9SRElOQUxfUE9TSVRJT046IG51bWJlcjtcbiAgICAvKiogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBjb2x1bW4uIFRoaXMgaXMgTlVMTCBpZiB0aGUgY29sdW1uIGhhcyBhbiBleHBsaWNpdCBkZWZhdWx0IG9mIE5VTEwsIG9yIGlmIHRoZSBjb2x1bW4gZGVmaW5pdGlvbiBpbmNsdWRlcyBubyBERUZBVUxUIGNsYXVzZS4gKi9cbiAgICBDT0xVTU5fREVGQVVMVDogdW5rbm93bjtcbiAgICBJU19OVUxMQUJMRTogXCJZRVNcIiB8IFwiTk9cIjtcbiAgICAvKiogQ29udGFpbnMgdGhlIHR5cGUgbmFtZSBhbmQgcG9zc2libHkgb3RoZXIgaW5mb3JtYXRpb24gc3VjaCBhcyB0aGUgcHJlY2lzaW9uIG9yIGxlbmd0aC4gKi9cbiAgICBDT0xVTU5fVFlQRTogc3RyaW5nO1xuICAgIC8qKiBlbXB0eSAtIG5vdCBpbmRleGVkIG9yIGlzIHNlY29uZGFyeSBjb2x1bW4gaW4gYSBtdWx0aS1jb2x1bW4gbm9udW5pcXVlIGluZGV4LiBQUkkgLSBwYXJ0IG9mIGEgcHJpbWFyeSBrZXkuIFVOSSAtIGZpcnN0IGNvbHVtbiBvZiBhIHVuaXF1ZSBpbmRleC4gTVVMIC0gZmlyc3QgY29sdW1uIG9mIGEgbm9udW5pcXVlIGluZGV4ICovXG4gICAgQ09MVU1OX0tFWTogXCJcIiB8IFwiUFJJXCIgfCBcIlVOSVwiIHwgXCJNVUxcIjtcbiAgICAvKiogRXh0cmEgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbHVtbi4gUG9zc2libGUgdmFsdWVzIGFyZSAqL1xuICAgIEVYVFJBOlxuICAgICAgfCBcIlwiXG4gICAgICB8IFwiYXV0b19pbmNyZW1lbnRcIlxuICAgICAgfCBcIm9uIHVwZGF0ZSBDVVJSRU5UX1RJTUVTVEFNUFwiXG4gICAgICB8IFwiU1RPUkVEIEdFTkVSQVRFRFwiXG4gICAgICB8IFwiVklSVFVBTCBHRU5FUkFURURcIlxuICAgICAgfCBcIkRFRkFVTFQgR0VORVJBVEVEXCI7XG4gICAgLyoqIEZvciBnZW5lcmF0ZWQgY29sdW1ucywgZGlzcGxheXMgdGhlIGV4cHJlc3Npb24gdXNlZCB0byBjb21wdXRlIGNvbHVtbiB2YWx1ZXMuIEVtcHR5IGZvciBub25nZW5lcmF0ZWQgY29sdW1ucy4gRm9yIGluZm9ybWF0aW9uIGFib3V0IGdlbmVyYXRlZCBjb2x1bW5zLCBzZWUgU2VjdGlvbiAxNS4xLjIwLjgsIFx1MjAxQ0NSRUFURSBUQUJMRSBhbmQgR2VuZXJhdGVkIENvbHVtbnNcdTIwMUQuICovXG4gICAgR0VORVJBVElPTl9FWFBSRVNTSU9OOiBzdHJpbmc7XG4gIH07XG5cbiAgLyoqIGh0dHBzOi8vZGV2Lm15c3FsLmNvbS9kb2MvcmVmbWFuLzguNC9lbi9pbmZvcm1hdGlvbi1zY2hlbWEtdGFibGVzLXRhYmxlLmh0bWwgKi9cbiAgXCJpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzXCI6IHtcbiAgICAvKiogVGhlIG5hbWUgb2YgdGhlIHNjaGVtYSAoZGF0YWJhc2UpIHRvIHdoaWNoIHRoZSB0YWJsZSBiZWxvbmdzLiAqL1xuICAgIFRBQkxFX1NDSEVNQTogc3RyaW5nO1xuICAgIFRBQkxFX05BTUU6IHN0cmluZztcbiAgICAvKiogQkFTRSBUQUJMRSBmb3IgYSB0YWJsZSwgVklFVyBmb3IgYSB2aWV3LCBvciBTWVNURU0gVklFVyBmb3IgYW4gSU5GT1JNQVRJT05fU0NIRU1BIHRhYmxlLiAqL1xuICAgIFRBQkxFX1RZUEU6IFwiQkFTRSBUQUJMRVwiIHwgXCJWSUVXXCIgfCBcIlNZU1RFTSBWSUVXXCI7XG4gIH07XG5cbiAgLyoqIGh0dHBzOi8vZGV2Lm15c3FsLmNvbS9kb2MvcmVmbWFuLzguNC9lbi9pbmZvcm1hdGlvbi1zY2hlbWEta2V5LWNvbHVtbi11c2FnZS10YWJsZS5odG1sICovXG4gIFwiaW5mb3JtYXRpb25fc2NoZW1hLktFWV9DT0xVTU5fVVNBR0VcIjoge1xuICAgIENPTlNUUkFJTlRfU0NIRU1BOiBzdHJpbmc7XG4gICAgQ09OU1RSQUlOVF9OQU1FOiBzdHJpbmc7XG4gICAgVEFCTEVfU0NIRU1BOiBzdHJpbmc7XG4gICAgVEFCTEVfTkFNRTogc3RyaW5nO1xuICAgIENPTFVNTl9OQU1FOiBzdHJpbmc7XG4gICAgLyoqIG51bGwgLSB3aGVuIHVuaXF1ZSBvciBwcmltYXJ5IGtleSBjb25zdHJhaW50LiAxLW4gLSB3aGVuIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgKi9cbiAgICBQT1NJVElPTl9JTl9VTklRVUVfQ09OU1RSQUlOVDogbnVtYmVyIHwgbnVsbDtcbiAgICBSRUZFUkVOQ0VEX1RBQkxFX1NDSEVNQTogc3RyaW5nO1xuICAgIFJFRkVSRU5DRURfVEFCTEVfTkFNRTogc3RyaW5nO1xuICAgIFJFRkVSRU5DRURfQ09MVU1OX05BTUU6IHN0cmluZztcbiAgfTtcblxuICAvKiogaHR0cHM6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vOC40L2VuL2luZm9ybWF0aW9uLXNjaGVtYS10YWJsZS1jb25zdHJhaW50cy10YWJsZS5odG1sICovXG4gIFwiaW5mb3JtYXRpb25fc2NoZW1hLlRBQkxFX0NPTlNUUkFJTlRTXCI6IHtcbiAgICBDT05TVFJBSU5UX1NDSEVNQTogc3RyaW5nO1xuICAgIENPTlNUUkFJTlRfTkFNRTogc3RyaW5nO1xuICAgIFRBQkxFX1NDSEVNQTogc3RyaW5nO1xuICAgIFRBQkxFX05BTUU6IHN0cmluZztcbiAgICBDT05TVFJBSU5UX1RZUEU6IFwiUFJJTUFSWSBLRVlcIiB8IFwiRk9SRUlHTiBLRVlcIiB8IFwiVU5JUVVFXCIgfCBcIkNIRUNLXCI7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZXNRdWVyeShyZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+KSB7XG4gIHJldHVybiBjb21waWxlKFxuICAgIGdldE15U1FMQnVpbGRlcjxEYXRhYmFzZT4ocmVxdWlyZW1lbnRzKVxuICAgICAgLnNlbGVjdEZyb20oXCJpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIGFzIHRcIilcbiAgICAgIC53aGVyZShcInQuVEFCTEVfU0NIRU1BXCIsIFwiPVwiLCBzcWw8c3RyaW5nPmBkYXRhYmFzZSgpYClcbiAgICAgIC53aGVyZShcInQuVEFCTEVfVFlQRVwiLCBcImluXCIsIFtcIkJBU0UgVEFCTEVcIiwgXCJWSUVXXCJdKVxuICAgICAgLnNlbGVjdChbXCJ0LlRBQkxFX1NDSEVNQSBhcyBzY2hlbWFcIiwgXCJ0LlRBQkxFX05BTUUgYXMgbmFtZVwiLCBcInQuVEFCTEVfVFlQRSBhcyB0eXBlXCJdKVxuICAgICAgLiRuYXJyb3dUeXBlPHsgdHlwZTogXCJCQVNFIFRBQkxFXCIgfCBcIlZJRVdcIiB9PigpXG4gICAgICAuc2VsZWN0KChlYikgPT5cbiAgICAgICAgLy8gYGpzb25fYXJyYXlhZ2dgIGlnbm9yZXMgYG9yZGVyIGJ5YCBpbnNpZGUgdGhlIHN1YnF1ZXJ5LCBzbyB3ZSBuZWVkIHRvIG9yZGVyIGFmdGVyIGFnZ3JlZ2F0aW9uLlxuICAgICAgICBqc29uQXJyYXlGcm9tKFxuICAgICAgICAgIGViXG4gICAgICAgICAgICAuc2VsZWN0RnJvbShcImluZm9ybWF0aW9uX3NjaGVtYS5jb2x1bW5zIGFzIGNcIilcbiAgICAgICAgICAgIC5sZWZ0Sm9pbihcImluZm9ybWF0aW9uX3NjaGVtYS5LRVlfQ09MVU1OX1VTQUdFIGFzIGtjdVwiLCAoamIpID0+XG4gICAgICAgICAgICAgIGpiXG4gICAgICAgICAgICAgICAgLm9uUmVmKFwia2N1LlRBQkxFX1NDSEVNQVwiLCBcIj1cIiwgXCJjLlRBQkxFX1NDSEVNQVwiKVxuICAgICAgICAgICAgICAgIC5vblJlZihcImtjdS5UQUJMRV9OQU1FXCIsIFwiPVwiLCBcImMuVEFCTEVfTkFNRVwiKVxuICAgICAgICAgICAgICAgIC5vblJlZihcImtjdS5DT0xVTU5fTkFNRVwiLCBcIj1cIiwgXCJjLkNPTFVNTl9OQU1FXCIpXG4gICAgICAgICAgICAgICAgLy8gb25seSBnZXQgZm9yZWlnbiBrZXkgY29uc3RyYWludHNcbiAgICAgICAgICAgICAgICAub24oXCJrY3UuUE9TSVRJT05fSU5fVU5JUVVFX0NPTlNUUkFJTlRcIiwgXCJpcyBub3RcIiwgbnVsbCksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAud2hlcmVSZWYoXCJjLlRBQkxFX1NDSEVNQVwiLCBcIj1cIiwgXCJ0LlRBQkxFX1NDSEVNQVwiKVxuICAgICAgICAgICAgLndoZXJlUmVmKFwiYy5UQUJMRV9OQU1FXCIsIFwiPVwiLCBcInQuVEFCTEVfTkFNRVwiKVxuICAgICAgICAgICAgLnNlbGVjdChbXG4gICAgICAgICAgICAgIFwiYy5DT0xVTU5fTkFNRSBhcyBuYW1lXCIsXG4gICAgICAgICAgICAgIFwiYy5DT0xVTU5fVFlQRSBhcyBkYXRhdHlwZVwiLFxuICAgICAgICAgICAgICBcImMuT1JESU5BTF9QT1NJVElPTiBhcyBwb3NpdGlvblwiLFxuICAgICAgICAgICAgICBcImtjdS5SRUZFUkVOQ0VEX1RBQkxFX05BTUUgYXMgZmtfdGFibGVcIixcbiAgICAgICAgICAgICAgXCJrY3UuUkVGRVJFTkNFRF9DT0xVTU5fTkFNRSBhcyBma19jb2x1bW5cIixcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAuc2VsZWN0KChlYikgPT4gW1xuICAgICAgICAgICAgICBlYihcImMuRVhUUkFcIiwgXCI9XCIsIFwiYXV0b19pbmNyZW1lbnRcIikuYXMoXCJhdXRvaW5jcmVtZW50XCIpLFxuICAgICAgICAgICAgICBlYihcImMuRVhUUkFcIiwgXCJpblwiLCBbXCJvbiB1cGRhdGUgQ1VSUkVOVF9USU1FU1RBTVBcIiwgXCJTVE9SRUQgR0VORVJBVEVEXCIsIFwiVklSVFVBTCBHRU5FUkFURURcIl0pLmFzKFxuICAgICAgICAgICAgICAgIFwiY29tcHV0ZWRcIixcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgZWIoXCJjLkNPTFVNTl9LRVlcIiwgXCI9XCIsIFwiUFJJXCIpLmFzKFwicGtcIiksXG4gICAgICAgICAgICAgIGViKFwiYy5JU19OVUxMQUJMRVwiLCBcIj1cIiwgXCJZRVNcIikuYXMoXCJudWxsYWJsZVwiKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICApLmFzKFwiY29sdW1uc1wiKSxcbiAgICAgIClcbiAgICAgIC5vcmRlckJ5KFwidC5UQUJMRV9TQ0hFTUFcIilcbiAgICAgIC5vcmRlckJ5KFwidC5UQUJMRV9OQU1FXCIpXG4gICAgICAub3JkZXJCeShcInQuVEFCTEVfVFlQRVwiKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vY2tUYWJsZXNRdWVyeSgpIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvaW5jcmVtZW50OiAxLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIGRhdGF0eXBlOiBcImludFwiLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgICAgbnVsbGFibGU6IDAsXG4gICAgICAgICAgcGs6IDEsXG4gICAgICAgICAgcG9zaXRpb246IDEsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvaW5jcmVtZW50OiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIGRhdGF0eXBlOiBcImJpbmFyeSgxNilcIixcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgbmFtZTogXCJ1dWlkXCIsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgcG9zaXRpb246IDIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvaW5jcmVtZW50OiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInZhcmNoYXIoMjU1KVwiLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBwb3NpdGlvbjogMyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9pbmNyZW1lbnQ6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDEsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBuYW1lOiBcImlkX25hbWVcIixcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBwb3NpdGlvbjogNCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBuYW1lOiBcImFuaW1hbHNcIixcbiAgICAgIHNjaGVtYTogXCJzdHVkaW9cIixcbiAgICAgIHR5cGU6IFwiQkFTRSBUQUJMRVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAgYXV0b2luY3JlbWVudDogMSxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBkYXRhdHlwZTogXCJpbnRcIixcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgbmFtZTogXCJpZFwiLFxuICAgICAgICAgIG51bGxhYmxlOiAwLFxuICAgICAgICAgIHBrOiAxLFxuICAgICAgICAgIHBvc2l0aW9uOiAxLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYXV0b2luY3JlbWVudDogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBkYXRhdHlwZTogXCJ0aW1lc3RhbXBcIixcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgbmFtZTogXCJjcmVhdGVkX2F0XCIsXG4gICAgICAgICAgbnVsbGFibGU6IDEsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgcG9zaXRpb246IDIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvaW5jcmVtZW50OiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIGRhdGF0eXBlOiBcImVudW0oJ2FkbWluJywnbWFpbnRhaW5lcicsJ21lbWJlcicpXCIsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIG5hbWU6IFwicm9sZVwiLFxuICAgICAgICAgIG51bGxhYmxlOiAwLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIHBvc2l0aW9uOiAzLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYXV0b2luY3JlbWVudDogMCxcbiAgICAgICAgICBjb21wdXRlZDogMCxcbiAgICAgICAgICBkYXRhdHlwZTogXCJpbnRcIixcbiAgICAgICAgICBma19jb2x1bW46IFwiaWRcIixcbiAgICAgICAgICBma190YWJsZTogXCJhbmltYWxzXCIsXG4gICAgICAgICAgbmFtZTogXCJhbmltYWxfaWRcIixcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBwb3NpdGlvbjogNCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBuYW1lOiBcInVzZXJzXCIsXG4gICAgICBzY2hlbWE6IFwic3R1ZGlvXCIsXG4gICAgICB0eXBlOiBcIkJBU0UgVEFCTEVcIixcbiAgICB9LFxuICBdIGFzIGNvbnN0IHNhdGlzZmllcyBRdWVyeVJlc3VsdDx0eXBlb2YgZ2V0VGFibGVzUXVlcnk+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZXpvbmVRdWVyeShyZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+KSB7XG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRNeVNRTEJ1aWxkZXIocmVxdWlyZW1lbnRzKTtcblxuICBjb25zdCBzZXNzaW9uVHogPSBzcWw8XCJTWVNURU1cIiB8IChzdHJpbmcgJiB7fSk+YEBAc2Vzc2lvbi50aW1lX3pvbmVgO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC5zZWxlY3ROb0Zyb20oXG4gICAgICAgIGJ1aWxkZXJcbiAgICAgICAgICAuY2FzZSgpXG4gICAgICAgICAgLndoZW4oc2Vzc2lvblR6LCBcIj1cIiwgXCJTWVNURU1cIilcbiAgICAgICAgICAudGhlbihzcWw8c3RyaW5nPmBAQHN5c3RlbV90aW1lX3pvbmVgKVxuICAgICAgICAgIC5lbHNlKHNlc3Npb25UeilcbiAgICAgICAgICAuZW5kKClcbiAgICAgICAgICAuYXMoXCJ0aW1lem9uZVwiKSxcbiAgICAgIClcbiAgICAgIC4kbmFycm93VHlwZTx7IHRpbWV6b25lOiBzdHJpbmcgfT4oKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vY2tUaW1lem9uZVF1ZXJ5KCkge1xuICByZXR1cm4gW3sgdGltZXpvbmU6IFwiVVRDXCIgfV0gYXMgY29uc3Qgc2F0aXNmaWVzIFF1ZXJ5UmVzdWx0PHR5cGVvZiBnZXRUaW1lem9uZVF1ZXJ5Pjtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vbXlzcWwuZC50c1wiIC8+XG5pbXBvcnQgeyBzcWwgfSBmcm9tICcuLi9yYXctYnVpbGRlci9zcWwuanMnO1xuaW1wb3J0IHsgZ2V0SnNvbk9iamVjdEFyZ3MgfSBmcm9tICcuLi91dGlsL2pzb24tb2JqZWN0LWFyZ3MuanMnO1xuLyoqXG4gKiBBIE15U1FMIGhlbHBlciBmb3IgYWdncmVnYXRpbmcgYSBzdWJxdWVyeSBpbnRvIGEgSlNPTiBhcnJheS5cbiAqXG4gKiBOT1RFOiBUaGlzIGhlbHBlciBpcyBvbmx5IGd1YXJhbnRlZWQgdG8gZnVsbHkgd29yayB3aXRoIHRoZSBidWlsdC1pbiBgTXlzcWxEaWFsZWN0YC5cbiAqIFdoaWxlIHRoZSBwcm9kdWNlZCBTUUwgaXMgY29tcGF0aWJsZSB3aXRoIGFsbCBNeVNRTCBkYXRhYmFzZXMsIHNvbWUgdGhpcmQtcGFydHkgZGlhbGVjdHNcbiAqIG1heSBub3QgcGFyc2UgdGhlIG5lc3RlZCBKU09OIGludG8gYXJyYXlzLiBJbiB0aGVzZSBjYXNlcyB5b3UgY2FuIHVzZSB0aGUgYnVpbHQgaW5cbiAqIGBQYXJzZUpTT05SZXN1bHRzUGx1Z2luYCB0byBwYXJzZSB0aGUgcmVzdWx0cy5cbiAqXG4gKiAjIyMgRXhhbXBsZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsganNvbkFycmF5RnJvbSB9IGZyb20gJ2t5c2VseS9oZWxwZXJzL215c3FsJ1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICogICAuc2VsZWN0KChlYikgPT4gW1xuICogICAgICdpZCcsXG4gKiAgICAganNvbkFycmF5RnJvbShcbiAqICAgICAgIGViLnNlbGVjdEZyb20oJ3BldCcpXG4gKiAgICAgICAgIC5zZWxlY3QoWydwZXQuaWQgYXMgcGV0X2lkJywgJ3BldC5uYW1lJ10pXG4gKiAgICAgICAgIC53aGVyZVJlZigncGV0Lm93bmVyX2lkJywgJz0nLCAncGVyc29uLmlkJylcbiAqICAgICAgICAgLm9yZGVyQnkoJ3BldC5uYW1lJylcbiAqICAgICApLmFzKCdwZXRzJylcbiAqICAgXSlcbiAqICAgLmV4ZWN1dGUoKVxuICpcbiAqIHJlc3VsdFswXT8uaWRcbiAqIHJlc3VsdFswXT8ucGV0c1swXT8ucGV0X2lkXG4gKiByZXN1bHRbMF0/LnBldHNbMF0/Lm5hbWVcbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gKlxuICogYGBgc3FsXG4gKiBzZWxlY3QgYGlkYCwgKFxuICogICBzZWxlY3QgY2FzdChjb2FsZXNjZShqc29uX2FycmF5YWdnKGpzb25fb2JqZWN0KFxuICogICAgICdwZXRfaWQnLCBgYWdnYC5gcGV0X2lkYCxcbiAqICAgICAnbmFtZScsIGBhZ2dgLmBuYW1lYFxuICogICApKSwgJ1tdJykgYXMganNvbikgZnJvbSAoXG4gKiAgICAgc2VsZWN0IGBwZXRgLmBpZGAgYXMgYHBldF9pZGAsIGBwZXRgLmBuYW1lYFxuICogICAgIGZyb20gYHBldGBcbiAqICAgICB3aGVyZSBgcGV0YC5gb3duZXJfaWRgID0gYHBlcnNvbmAuYGlkYFxuICogICAgIG9yZGVyIGJ5IGBwZXRgLmBuYW1lYFxuICogICApIGFzIGBhZ2dgXG4gKiApIGFzIGBwZXRzYFxuICogZnJvbSBgcGVyc29uYFxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uQXJyYXlGcm9tKGV4cHIpIHtcbiAgICByZXR1cm4gc3FsIGAoc2VsZWN0IGNhc3QoY29hbGVzY2UoanNvbl9hcnJheWFnZyhqc29uX29iamVjdCgke3NxbC5qb2luKGdldE15c3FsSnNvbk9iamVjdEFyZ3MoZXhwci50b09wZXJhdGlvbk5vZGUoKSwgJ2FnZycpKX0pKSwgJ1tdJykgYXMganNvbikgZnJvbSAke2V4cHJ9IGFzIGFnZylgO1xufVxuLyoqXG4gKiBBIE15U1FMIGhlbHBlciBmb3IgdHVybmluZyBhIHN1YnF1ZXJ5IGludG8gYSBKU09OIG9iamVjdC5cbiAqXG4gKiBUaGUgc3VicXVlcnkgbXVzdCBvbmx5IHJldHVybiBvbmUgcm93LlxuICpcbiAqIE5PVEU6IFRoaXMgaGVscGVyIGlzIG9ubHkgZ3VhcmFudGVlZCB0byBmdWxseSB3b3JrIHdpdGggdGhlIGJ1aWx0LWluIGBNeXNxbERpYWxlY3RgLlxuICogV2hpbGUgdGhlIHByb2R1Y2VkIFNRTCBpcyBjb21wYXRpYmxlIHdpdGggYWxsIE15U1FMIGRhdGFiYXNlcywgc29tZSB0aGlyZC1wYXJ0eSBkaWFsZWN0c1xuICogbWF5IG5vdCBwYXJzZSB0aGUgbmVzdGVkIEpTT04gaW50byBvYmplY3RzLiBJbiB0aGVzZSBjYXNlcyB5b3UgY2FuIHVzZSB0aGUgYnVpbHQgaW5cbiAqIGBQYXJzZUpTT05SZXN1bHRzUGx1Z2luYCB0byBwYXJzZSB0aGUgcmVzdWx0cy5cbiAqXG4gKiAjIyMgRXhhbXBsZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsganNvbk9iamVjdEZyb20gfSBmcm9tICdreXNlbHkvaGVscGVycy9teXNxbCdcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAqICAgLnNlbGVjdCgoZWIpID0+IFtcbiAqICAgICAnaWQnLFxuICogICAgIGpzb25PYmplY3RGcm9tKFxuICogICAgICAgZWIuc2VsZWN0RnJvbSgncGV0JylcbiAqICAgICAgICAgLnNlbGVjdChbJ3BldC5pZCBhcyBwZXRfaWQnLCAncGV0Lm5hbWUnXSlcbiAqICAgICAgICAgLndoZXJlUmVmKCdwZXQub3duZXJfaWQnLCAnPScsICdwZXJzb24uaWQnKVxuICogICAgICAgICAud2hlcmUoJ3BldC5pc19mYXZvcml0ZScsICc9JywgdHJ1ZSlcbiAqICAgICApLmFzKCdmYXZvcml0ZV9wZXQnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKlxuICogcmVzdWx0WzBdPy5pZFxuICogcmVzdWx0WzBdPy5mYXZvcml0ZV9wZXQ/LnBldF9pZFxuICogcmVzdWx0WzBdPy5mYXZvcml0ZV9wZXQ/Lm5hbWVcbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gKlxuICogYGBgc3FsXG4gKiBzZWxlY3QgYGlkYCwgKFxuICogICBzZWxlY3QganNvbl9vYmplY3QoXG4gKiAgICAgJ3BldF9pZCcsIGBvYmpgLmBwZXRfaWRgLFxuICogICAgICduYW1lJywgYG9iamAuYG5hbWVgXG4gKiAgICkgZnJvbSAoXG4gKiAgICAgc2VsZWN0IGBwZXRgLmBpZGAgYXMgYHBldF9pZGAsIGBwZXRgLmBuYW1lYFxuICogICAgIGZyb20gYHBldGBcbiAqICAgICB3aGVyZSBgcGV0YC5gb3duZXJfaWRgID0gYHBlcnNvbmAuYGlkYFxuICogICAgIGFuZCBgcGV0YC5gaXNfZmF2b3JpdGVgID0gP1xuICogICApIGFzIG9ialxuICogKSBhcyBgZmF2b3JpdGVfcGV0YFxuICogZnJvbSBgcGVyc29uYFxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uT2JqZWN0RnJvbShleHByKSB7XG4gICAgcmV0dXJuIHNxbCBgKHNlbGVjdCBqc29uX29iamVjdCgke3NxbC5qb2luKGdldE15c3FsSnNvbk9iamVjdEFyZ3MoZXhwci50b09wZXJhdGlvbk5vZGUoKSwgJ29iaicpKX0pIGZyb20gJHtleHByfSBhcyBvYmopYDtcbn1cbi8qKlxuICogVGhlIE15U1FMIGBqc29uX29iamVjdGAgZnVuY3Rpb24uXG4gKlxuICogTk9URTogVGhpcyBoZWxwZXIgaXMgb25seSBndWFyYW50ZWVkIHRvIGZ1bGx5IHdvcmsgd2l0aCB0aGUgYnVpbHQtaW4gYE15c3FsRGlhbGVjdGAuXG4gKiBXaGlsZSB0aGUgcHJvZHVjZWQgU1FMIGlzIGNvbXBhdGlibGUgd2l0aCBhbGwgTXlTUUwgZGF0YWJhc2VzLCBzb21lIHRoaXJkLXBhcnR5IGRpYWxlY3RzXG4gKiBtYXkgbm90IHBhcnNlIHRoZSBuZXN0ZWQgSlNPTiBpbnRvIG9iamVjdHMuIEluIHRoZXNlIGNhc2VzIHlvdSBjYW4gdXNlIHRoZSBidWlsdCBpblxuICogYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gIHRvIHBhcnNlIHRoZSByZXN1bHRzLlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAqICAgLnNlbGVjdCgoZWIpID0+IFtcbiAqICAgICAnaWQnLFxuICogICAgIGpzb25CdWlsZE9iamVjdCh7XG4gKiAgICAgICBmaXJzdDogZWIucmVmKCdmaXJzdF9uYW1lJyksXG4gKiAgICAgICBsYXN0OiBlYi5yZWYoJ2xhc3RfbmFtZScpLFxuICogICAgICAgZnVsbDogZWIuZm4oJ2NvbmNhdCcsIFsnZmlyc3RfbmFtZScsIGViLnZhbCgnICcpLCAnbGFzdF9uYW1lJ10pXG4gKiAgICAgfSkuYXMoJ25hbWUnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKlxuICogcmVzdWx0WzBdPy5pZFxuICogcmVzdWx0WzBdPy5uYW1lLmZpcnN0XG4gKiByZXN1bHRbMF0/Lm5hbWUubGFzdFxuICogcmVzdWx0WzBdPy5uYW1lLmZ1bGxcbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gKlxuICogYGBgc3FsXG4gKiBzZWxlY3QgXCJpZFwiLCBqc29uX29iamVjdChcbiAqICAgJ2ZpcnN0JywgZmlyc3RfbmFtZSxcbiAqICAgJ2xhc3QnLCBsYXN0X25hbWUsXG4gKiAgICdmdWxsJywgY29uY2F0KGBmaXJzdF9uYW1lYCwgPywgYGxhc3RfbmFtZWApXG4gKiApIGFzIFwibmFtZVwiXG4gKiBmcm9tIFwicGVyc29uXCJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24ganNvbkJ1aWxkT2JqZWN0KG9iaikge1xuICAgIHJldHVybiBzcWwgYGpzb25fb2JqZWN0KCR7c3FsLmpvaW4oT2JqZWN0LmtleXMob2JqKS5mbGF0TWFwKChrKSA9PiBbc3FsLmxpdChrKSwgb2JqW2tdXSkpfSlgO1xufVxuZnVuY3Rpb24gZ2V0TXlzcWxKc29uT2JqZWN0QXJncyhub2RlLCB0YWJsZSkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBnZXRKc29uT2JqZWN0QXJncyhub2RlLCB0YWJsZSk7XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNeVNRTCBqc29uQXJyYXlGcm9tIGFuZCBqc29uT2JqZWN0RnJvbSBmdW5jdGlvbnMgY2FuIG9ubHkgaGFuZGxlIGV4cGxpY2l0IHNlbGVjdGlvbnMgZHVlIHRvIGxpbWl0YXRpb25zIG9mIHRoZSBqc29uX29iamVjdCBmdW5jdGlvbi4gc2VsZWN0QWxsKCkgaXMgbm90IGFsbG93ZWQgaW4gdGhlIHN1YnF1ZXJ5LicpO1xuICAgIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7OzZRQUFBQSxJQ0FBQyxJQ0FBQyxJQUVPLElBQU1DLEVBQXdFLENBQ25GLE9BQVEsQ0FDTixNQUFPLFNBQ1QsRUFDQSxPQUFRLENBQ04sTUFBTyxRQUNU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VCxDQUNGLENBQ0YsRUFDQSxDQUFDLENBQ0gsRUFFRixPQUFJRixFQUFRRyxDQUFNLElBQU0sU0FDdEJILEVBQVFHLENBQU0sRUFBSSxDQUFFLEtBQU1BLEVBQVEsT0FBUSxDQUFDLENBQUUsR0FHL0NILEVBQVFHLENBQU0sRUFBRSxPQUFPRCxDQUFTLEVBQUksQ0FBRSxRQUFTRSxFQUFlLEtBQU1GLEVBQVcsT0FBQUMsQ0FBTyxFQUUvRUwsQ0FDVCxFQUNBLENBQUUsZ0JBQUFlLEVBQWlCLE1BQUFsQyxFQUFPLFFBQVMsQ0FBQyxFQUFHLFNBQUFjLENBQVMsQ0FDbEQsQ0FDRixDQUVBLElBQU1vQixFQUFrQixDQUN0QixJQUNBLEtBQ0EsSUFDQSxLQUNBLElBQ0EsS0FDQSxLQUNBLFNBQ0EsT0FDQSxVQUNGLEVBS08sU0FBU0MsSUFBaUIsQ0FDL0IsSUFBTXhCLEVBQVN5QixFQUFnQixFQUN6QixDQUFDLENBQUUsU0FBQXRCLENBQVMsQ0FBQyxFQUFJdUIsRUFBa0IsRUFHekMsT0FBT3RCLEVBQW9CLENBQUUsT0FBQUosRUFBUSxTQUFBRyxFQUFVLE1BRmpDLENBQUUsV0FBWSxDQUFDLEVBQUcsSUFBSyxVQUFXLENBRUssQ0FBQyxDQWN4RCIsCiAgIm5hbWVzIjogWyJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJNWVNRTF9EQVRBX1RZUEVTX1RPX01FVEFEQVRBIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImdldE15U1FMQnVpbGRlciIsICJyZXF1aXJlbWVudHMiLCAiZ2V0QnVpbGRlciIsICJNeXNxbEFkYXB0ZXIiLCAiTXlzcWxRdWVyeUNvbXBpbGVyIiwgImdldERlbGV0ZVF1ZXJ5IiwgImRldGFpbHMiLCAicmVxdWlyZW1lbnRzIiwgInJvd3MiLCAiY29sdW1ucyIsICJ0YWJsZU5hbWUiLCAiYnVpbGRlciIsICJnZXRNeVNRTEJ1aWxkZXIiLCAiY29tcGlsZSIsICJhcHBseUluZmVycmVkUm93RmlsdGVycyIsICJnZXRJbnNlcnRRdWVyeSIsICJfZGV0YWlscyIsICJfcmVxdWlyZW1lbnRzIiwgImdldFNlbGVjdFF1ZXJ5IiwgImZpbHRlciIsICJwYWdlSW5kZXgiLCAicGFnZVNpemUiLCAic29ydE9yZGVyIiwgImZpbHRlckV4cHJlc3Npb24iLCAiZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbiIsICJjb3VudFF1ZXJ5IiwgImViIiwgInNxbCIsICJxYiIsICJpdGVtIiwgIm1vY2tTZWxlY3RRdWVyeSIsICJnZXRVcGRhdGVRdWVyeSIsICJjaGFuZ2VzIiwgInJvdyIsICJzY2hlbWEiLCAiYXBwbHlUcmFuc2Zvcm1hdGlvbnMiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAianNvbkFycmF5RnJvbSIsICJleHByIiwgInNxbCIsICJnZXRNeXNxbEpzb25PYmplY3RBcmdzIiwgImdldE15c3FsSnNvbk9iamVjdEFyZ3MiLCAibm9kZSIsICJ0YWJsZSIsICJnZXRKc29uT2JqZWN0QXJncyIsICJnZXRUYWJsZXNRdWVyeSIsICJyZXF1aXJlbWVudHMiLCAiY29tcGlsZSIsICJnZXRNeVNRTEJ1aWxkZXIiLCAic3FsIiwgImViIiwgImpzb25BcnJheUZyb20iLCAiamIiLCAibW9ja1RhYmxlc1F1ZXJ5IiwgImdldFRpbWV6b25lUXVlcnkiLCAiYnVpbGRlciIsICJzZXNzaW9uVHoiLCAibW9ja1RpbWV6b25lUXVlcnkiLCAiY3JlYXRlTXlTUUxBZGFwdGVyIiwgInJlcXVpcmVtZW50cyIsICJleGVjdXRvciIsICJvdGhlclJlcXVpcmVtZW50cyIsICJkZXRhaWxzIiwgIm9wdGlvbnMiLCAicXVlcnkiLCAiZ2V0RGVsZXRlUXVlcnkiLCAiZXJyb3IiLCAiY3JlYXRlQWRhcHRlckVycm9yIiwgIl9kZXRhaWxzIiwgIl9vcHRpb25zIiwgInRhYmxlc1F1ZXJ5IiwgImdldFRhYmxlc1F1ZXJ5IiwgInRpbWV6b25lUXVlcnkiLCAiZ2V0VGltZXpvbmVRdWVyeSIsICJ0YWJsZXNFcnJvciIsICJ0YWJsZXMiLCAidGltZXpvbmVFcnJvciIsICJ0aW1lem9uZXMiLCAidGltZXpvbmUiLCAiY3JlYXRlSW50cm9zcGVjdGlvbiIsICJnZXRTZWxlY3RRdWVyeSIsICJyZXN1bHRzIiwgImFyZ3MiLCAicmVzdWx0IiwgInRhYmxlIiwgInNjaGVtYXMiLCAiY29sdW1ucyIsICJ0YWJsZU5hbWUiLCAic2NoZW1hIiwgImNvbHVtbnNSZWNvcmQiLCAiYSIsICJiIiwgImNvbHVtbiIsICJkYXRhdHlwZSIsICJjb2x1bW5OYW1lIiwgImluZGV4T2ZQYXJlbnRoZXNpcyIsICJzdHJpcHBlZERhdGFUeXBlIiwgIk1ZU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEEiLCAiZmlsdGVyT3BlcmF0b3JzIiwgIm1vY2tJbnRyb3NwZWN0IiwgIm1vY2tUYWJsZXNRdWVyeSIsICJtb2NrVGltZXpvbmVRdWVyeSJdCn0K
9
+ import{a as k}from"../../chunk-32BUC7NR.js";import{a as H}from"../../chunk-ZUEQ555M.js";import{a as c}from"../../chunk-24UZSKGU.js";import{i as p,n as M,o as S,p as L,r as A,s as T,u as B,v as O}from"../../chunk-A6CVKSUD.js";import{e as l}from"../../chunk-GDQBQ7MK.js";l();l();l();var h={bigint:{group:"numeric"},binary:{group:"string"},bit:{group:"raw"},blob:{group:"string"},char:{group:"string"},"char binary":{group:"string"},date:{group:"datetime"},datetime:{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:{group:"time"},timestamp:{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:{group:"numeric"}};l();l();function g(t){return L({...t,Adapter:S,QueryCompiler:M})}function Q(t,n){let{rows:o,table:{columns:i,name:r}}=t,e=g(n);return A(e.deleteFrom(r).$call(T(o,i)))}function ee(t,n){throw new Error("Not implemented")}function C(t,n){let{changes:o,row:i,table:{columns:r,name:e}}=t,s=g(n);return A(s.selectFrom(e).$call(T([{...i,changes:o}],r)).select(Object.keys(r)).select(F().as("__ps_updated_at__")))}function I(t,n){let{filter:o={after:"and",filters:[],kind:"FilterGroup"},pageIndex:i,pageSize:r,sortOrder:e,table:{columns:s,name:u}}=t,E=g(n),a=O(o.filters,s),d=E.selectFrom(u).where(a).select(m=>m.cast(m.fn.coalesce(m.fn.countAll(),p.lit(0)),"text").as("value"));return A(E.with("count",()=>d).selectFrom([u,"count"]).where(a).select(Object.keys(s)).select(p.ref("count.value").as("__ps_count__")).$call(m=>e.reduce((y,f)=>y.orderBy(f.column,f.direction),m)).limit(r).offset(p.lit(BigInt(i)*BigInt(r))))}function te(){return[]}function w(t,n){let{changes:o,row:i,table:{columns:r,name:e,schema:s}}=t,u=g(n);return A(u.withSchema(s).updateTable(e).set(B("update",o,r)).$call(T([i],r)))}function F(){return p`cast(unix_timestamp(now(3)) * 1000 as unsigned)`}l();l();function x(t){return p`(select cast(coalesce(json_arrayagg(json_object(${p.join(z(t.toOperationNode(),"agg"))})), '[]') as json) from ${t} as agg)`}function z(t,n){try{return k(t,n)}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 q(t){return A(g(t).selectFrom("information_schema.tables as t").where("t.TABLE_SCHEMA","=",p`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(n=>x(n.selectFrom("information_schema.columns as c").leftJoin("information_schema.KEY_COLUMN_USAGE as kcu",o=>o.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)).whereRef("c.TABLE_SCHEMA","=","t.TABLE_SCHEMA").whereRef("c.TABLE_NAME","=","t.TABLE_NAME").select(["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"]).select(o=>[o("c.EXTRA","=","auto_increment").as("autoincrement"),o("c.EXTRA","in",["on update CURRENT_TIMESTAMP","STORED GENERATED","VIRTUAL GENERATED"]).as("computed"),o("c.COLUMN_KEY","=","PRI").as("pk"),o("c.IS_NULLABLE","=","YES").as("nullable")])).as("columns")).orderBy("t.TABLE_SCHEMA").orderBy("t.TABLE_NAME").orderBy("t.TABLE_TYPE"))}function U(){return[{columns:[{autoincrement:1,computed:0,datatype:"int",fk_column:null,fk_table:null,name:"id",nullable:0,pk:1,position:1},{autoincrement:0,computed:0,datatype:"binary(16)",fk_column:null,fk_table:null,name:"uuid",nullable:1,pk:0,position:2},{autoincrement:0,computed:0,datatype:"varchar(255)",fk_column:null,fk_table:null,name:"name",nullable:1,pk:0,position:3},{autoincrement:0,computed:1,datatype:"text",fk_column:null,fk_table:null,name:"id_name",nullable:1,pk:0,position:4}],name:"animals",schema:"studio",type:"BASE TABLE"},{columns:[{autoincrement:1,computed:0,datatype:"int",fk_column:null,fk_table:null,name:"id",nullable:0,pk:1,position:1},{autoincrement:0,computed:0,datatype:"timestamp",fk_column:null,fk_table:null,name:"created_at",nullable:1,pk:0,position:2},{autoincrement:0,computed:0,datatype:"enum('admin','maintainer','member')",fk_column:null,fk_table:null,name:"role",nullable:0,pk:0,position:3},{autoincrement:0,computed:0,datatype:"int",fk_column:"id",fk_table:"animals",name:"animal_id",nullable:1,pk:0,position:4}],name:"users",schema:"studio",type:"BASE TABLE"}]}function D(t){let n=g(t),o=p`@@session.time_zone`;return A(n.selectNoFrom(n.case().when(o,"=","SYSTEM").then(p`@@system_time_zone`).else(o).end().as("timezone")).$narrowType())}function j(){return[{timezone:"UTC"}]}function fe(t){let{executor:n,...o}=t;return{async delete(i,r){try{let e=Q(i,o),[s]=await n.execute(e,r);return s?c({error:s,query:e}):[null,{...i,query:e}]}catch(e){return c({error:e})}},insert(i,r){throw new Error("Method not implemented.")},async introspect(i){try{let r=q(t),e=D(t),[[s,u],[E,a]]=await Promise.all([n.execute(r,i),n.execute(e,i)]);if(s)return c({error:s,query:r});if(E)return c({error:E,query:e});let d=a[0]?.timezone;return d?[null,P({query:r,tables:u,timezone:d})]:c({error:new Error("Timezone not found"),query:e})}catch(r){return c({error:r})}},async query(i,r){try{let e=I(i,o),[s,u]=await n.execute(e,r);return s?c({error:s,query:e}):[null,{filteredRowCount:u[0]?.__ps_count__||"0",rows:u,query:e}]}catch(e){return c({error:e})}},async update(i,r){try{let e=w(i,o),s=C(i,o),[[u],E]=await n.executeSequence([e,s],r);if(u)return c({error:u,query:e});let[a,d]=E;if(a)return c({error:a,query:e});let[m]=d;return m?[null,{row:m,query:e}]:c({error:new Error("Updated row not found"),query:e})}catch(e){return c({error:e})}}}}function P(t){let{query:n,tables:o,timezone:i}=t;return o.reduce((r,e)=>{let{schemas:s}=r,{columns:u,name:E,schema:a}=e,d=u.sort((m,y)=>m.position-y.position).reduce((m,y)=>{let{datatype:f,name:R}=y,N=f.indexOf("("),b=(N>-1?f.substring(0,N):f).trim().toLowerCase();return{...m,[R]:{datatype:{...h[b]||{group:"raw"},isArray:!1,isNative:!0,name:b,options:b==="enum"?f.slice(6,-2).split("','"):[],schema:a},fkColumn:y.fk_column,fkSchema:a,fkTable:y.fk_table,isComputed:!!y.computed,isInPrimaryKey:!!y.pk,name:R,nullable:!!y.nullable,schema:a,table:E}}},{});return s[a]===void 0&&(s[a]={name:a,tables:{}}),s[a].tables[E]={columns:d,name:E,schema:a},r},{filterOperators:Y,query:n,schemas:{},timezone:i})}var Y=["=","!=",">",">=","<","<=","is","is not","like","not like"];function _e(){let t=U(),[{timezone:n}]=j();return P({tables:t,timezone:n,query:{parameters:[],sql:"<mocked>"}})}export{fe as createMySQLAdapter,H as getCancelQuery,Q as getDeleteQuery,ee as getInsertQuery,I as getSelectQuery,q as getTablesQuery,D as getTimezoneQuery,w as getUpdateQuery,C as getUpdateRefetchQuery,_e as mockIntrospect,te as mockSelectQuery,U as mockTablesQuery,j as mockTimezoneQuery};
10
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vZGF0YS9teXNxbC1jb3JlL2luZGV4LnRzIiwgIi4uLy4uLy4uL2RhdGEvbXlzcWwtY29yZS9hZGFwdGVyLnRzIiwgIi4uLy4uLy4uL2RhdGEvbXlzcWwtY29yZS9kYXRhdHlwZS50cyIsICIuLi8uLi8uLi9kYXRhL215c3FsLWNvcmUvZG1sLnRzIiwgIi4uLy4uLy4uL2RhdGEvbXlzcWwtY29yZS9idWlsZGVyLnRzIiwgIi4uLy4uLy4uL2RhdGEvbXlzcWwtY29yZS9pbnRyb3NwZWN0aW9uLnRzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vaGVscGVycy9teXNxbC5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0ICogZnJvbSBcIi4vYWRhcHRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZG1sXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pbnRyb3NwZWN0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsaXR5XCI7XG4iLCAiaW1wb3J0IHtcbiAgdHlwZSBBZGFwdGVyLFxuICB0eXBlIEFkYXB0ZXJEZWxldGVSZXN1bHQsXG4gIHR5cGUgQWRhcHRlckVycm9yLFxuICB0eXBlIEFkYXB0ZXJJbnNlcnRSZXN1bHQsXG4gIHR5cGUgQWRhcHRlckludHJvc3BlY3RSZXN1bHQsXG4gIHR5cGUgQWRhcHRlclF1ZXJ5UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJSZXF1aXJlbWVudHMsXG4gIHR5cGUgQWRhcHRlclVwZGF0ZVJlc3VsdCxcbiAgdHlwZSBDb2x1bW4sXG4gIGNyZWF0ZUFkYXB0ZXJFcnJvcixcbiAgdHlwZSBGaWx0ZXJPcGVyYXRvcixcbiAgdHlwZSBUYWJsZSxcbn0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHsgU2VxdWVuY2VFeGVjdXRvciB9IGZyb20gXCIuLi9leGVjdXRvclwiO1xuaW1wb3J0IHR5cGUgeyBRdWVyeSwgUXVlcnlSZXN1bHQgfSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB0eXBlIHsgRWl0aGVyIH0gZnJvbSBcIi4uL3R5cGUtdXRpbHNcIjtcbmltcG9ydCB7IE1ZU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEEgfSBmcm9tIFwiLi9kYXRhdHlwZVwiO1xuaW1wb3J0IHsgZ2V0RGVsZXRlUXVlcnksIGdldFNlbGVjdFF1ZXJ5LCBnZXRVcGRhdGVRdWVyeSwgZ2V0VXBkYXRlUmVmZXRjaFF1ZXJ5IH0gZnJvbSBcIi4vZG1sXCI7XG5pbXBvcnQgeyBnZXRUYWJsZXNRdWVyeSwgZ2V0VGltZXpvbmVRdWVyeSwgbW9ja1RhYmxlc1F1ZXJ5LCBtb2NrVGltZXpvbmVRdWVyeSB9IGZyb20gXCIuL2ludHJvc3BlY3Rpb25cIjtcblxuZXhwb3J0IHR5cGUgTXlTUUxBZGFwdGVyUmVxdWlyZW1lbnRzID0gT21pdDxBZGFwdGVyUmVxdWlyZW1lbnRzLCBcImV4ZWN1dG9yXCI+ICYge1xuICBleGVjdXRvcjogU2VxdWVuY2VFeGVjdXRvcjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNeVNRTEFkYXB0ZXIocmVxdWlyZW1lbnRzOiBNeVNRTEFkYXB0ZXJSZXF1aXJlbWVudHMpOiBBZGFwdGVyIHtcbiAgY29uc3QgeyBleGVjdXRvciwgLi4ub3RoZXJSZXF1aXJlbWVudHMgfSA9IHJlcXVpcmVtZW50cztcblxuICByZXR1cm4ge1xuICAgIGFzeW5jIGRlbGV0ZShkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyRGVsZXRlUmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXREZWxldGVRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG5cbiAgICAgICAgY29uc3QgW2Vycm9yXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgLi4uZGV0YWlscywgcXVlcnkgfV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBpbnNlcnQoX2RldGFpbHMsIF9vcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW5zZXJ0UmVzdWx0Pj4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfSxcblxuICAgIGFzeW5jIGludHJvc3BlY3Qob3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckludHJvc3BlY3RSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0YWJsZXNRdWVyeSA9IGdldFRhYmxlc1F1ZXJ5KHJlcXVpcmVtZW50cyk7XG4gICAgICAgIGNvbnN0IHRpbWV6b25lUXVlcnkgPSBnZXRUaW1lem9uZVF1ZXJ5KHJlcXVpcmVtZW50cyk7XG5cbiAgICAgICAgY29uc3QgW1t0YWJsZXNFcnJvciwgdGFibGVzXSwgW3RpbWV6b25lRXJyb3IsIHRpbWV6b25lc11dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUodGFibGVzUXVlcnksIG9wdGlvbnMpLFxuICAgICAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUodGltZXpvbmVRdWVyeSwgb3B0aW9ucyksXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGlmICh0YWJsZXNFcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogdGFibGVzRXJyb3IsIHF1ZXJ5OiB0YWJsZXNRdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aW1lem9uZUVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiB0aW1lem9uZUVycm9yLCBxdWVyeTogdGltZXpvbmVRdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbWV6b25lID0gdGltZXpvbmVzWzBdPy50aW1lem9uZTtcblxuICAgICAgICBpZiAoIXRpbWV6b25lKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBuZXcgRXJyb3IoXCJUaW1lem9uZSBub3QgZm91bmRcIiksIHF1ZXJ5OiB0aW1lem9uZVF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCBjcmVhdGVJbnRyb3NwZWN0aW9uKHsgcXVlcnk6IHRhYmxlc1F1ZXJ5LCB0YWJsZXMsIHRpbWV6b25lIH0pXTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHF1ZXJ5KGRldGFpbHMsIG9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJRdWVyeVJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0U2VsZWN0UXVlcnkoZGV0YWlscywgb3RoZXJSZXF1aXJlbWVudHMpO1xuXG4gICAgICAgIGNvbnN0IFtlcnJvciwgcmVzdWx0c10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3IsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IGZpbHRlcmVkUm93Q291bnQ6IHJlc3VsdHNbMF0/Ll9fcHNfY291bnRfXyB8fCBcIjBcIiwgcm93czogcmVzdWx0cywgcXVlcnkgfV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgcHJvcGVybHlcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlKGRldGFpbHMsIG9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJVcGRhdGVSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB1cGRhdGVRdWVyeSA9IGdldFVwZGF0ZVF1ZXJ5KGRldGFpbHMsIG90aGVyUmVxdWlyZW1lbnRzKTtcbiAgICAgICAgY29uc3QgcmVmZXRjaFF1ZXJ5ID0gZ2V0VXBkYXRlUmVmZXRjaFF1ZXJ5KGRldGFpbHMsIG90aGVyUmVxdWlyZW1lbnRzKTtcblxuICAgICAgICBjb25zdCBbW3VwZGF0ZUVycm9yXSwgcmVmZXRjaFJlc3VsdF0gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlU2VxdWVuY2UoW3VwZGF0ZVF1ZXJ5LCByZWZldGNoUXVlcnldLCBvcHRpb25zKTtcblxuICAgICAgICBpZiAodXBkYXRlRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IHVwZGF0ZUVycm9yLCBxdWVyeTogdXBkYXRlUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbcmVmZXRjaEVycm9yLCByZXN1bHRzXSA9IHJlZmV0Y2hSZXN1bHQhO1xuXG4gICAgICAgIGlmIChyZWZldGNoRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IHJlZmV0Y2hFcnJvciwgcXVlcnk6IHVwZGF0ZVF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgW3Jvd10gPSByZXN1bHRzO1xuXG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBuZXcgRXJyb3IoXCJVcGRhdGVkIHJvdyBub3QgZm91bmRcIiksIHF1ZXJ5OiB1cGRhdGVRdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyByb3csIHF1ZXJ5OiB1cGRhdGVRdWVyeSB9XTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW50cm9zcGVjdGlvbihhcmdzOiB7XG4gIHF1ZXJ5OiBRdWVyeTtcbiAgdGFibGVzOiBRdWVyeVJlc3VsdDx0eXBlb2YgZ2V0VGFibGVzUXVlcnk+O1xuICB0aW1lem9uZTogc3RyaW5nO1xufSk6IEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0IHtcbiAgY29uc3QgeyBxdWVyeSwgdGFibGVzLCB0aW1lem9uZSB9ID0gYXJncztcblxuICByZXR1cm4gdGFibGVzLnJlZHVjZShcbiAgICAocmVzdWx0LCB0YWJsZSkgPT4ge1xuICAgICAgY29uc3QgeyBzY2hlbWFzIH0gPSByZXN1bHQ7XG4gICAgICBjb25zdCB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSwgc2NoZW1hIH0gPSB0YWJsZTtcblxuICAgICAgY29uc3QgY29sdW1uc1JlY29yZCA9IGNvbHVtbnNcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEucG9zaXRpb24gLSBiLnBvc2l0aW9uKVxuICAgICAgICAucmVkdWNlKFxuICAgICAgICAgIChjb2x1bW5zLCBjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YXR5cGUsIG5hbWU6IGNvbHVtbk5hbWUgfSA9IGNvbHVtbjtcblxuICAgICAgICAgICAgY29uc3QgaW5kZXhPZlBhcmVudGhlc2lzID0gZGF0YXR5cGUuaW5kZXhPZihcIihcIik7XG4gICAgICAgICAgICBjb25zdCBzdHJpcHBlZERhdGFUeXBlID0gKGluZGV4T2ZQYXJlbnRoZXNpcyA+IC0xID8gZGF0YXR5cGUuc3Vic3RyaW5nKDAsIGluZGV4T2ZQYXJlbnRoZXNpcykgOiBkYXRhdHlwZSlcbiAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY29sdW1ucyxcbiAgICAgICAgICAgICAgW2NvbHVtbk5hbWVdOiB7XG4gICAgICAgICAgICAgICAgZGF0YXR5cGU6IHtcbiAgICAgICAgICAgICAgICAgIC4uLihNWVNRTF9EQVRBX1RZUEVTX1RPX01FVEFEQVRBW3N0cmlwcGVkRGF0YVR5cGVdIHx8IHsgZ3JvdXA6IFwicmF3XCIgfSksXG4gICAgICAgICAgICAgICAgICBpc0FycmF5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIGlzTmF0aXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgbmFtZTogc3RyaXBwZWREYXRhVHlwZSxcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnM6XG4gICAgICAgICAgICAgICAgICAgIHN0cmlwcGVkRGF0YVR5cGUgPT09IFwiZW51bVwiID8gZGF0YXR5cGUuc2xpY2UoYGVudW0oJ2AubGVuZ3RoLCAtYCcpYC5sZW5ndGgpLnNwbGl0KGAnLCdgKSA6IFtdLFxuICAgICAgICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZmtDb2x1bW46IGNvbHVtbi5ma19jb2x1bW4sXG4gICAgICAgICAgICAgICAgZmtTY2hlbWE6IHNjaGVtYSxcbiAgICAgICAgICAgICAgICBma1RhYmxlOiBjb2x1bW4uZmtfdGFibGUsXG4gICAgICAgICAgICAgICAgaXNDb21wdXRlZDogQm9vbGVhbihjb2x1bW4uY29tcHV0ZWQpLFxuICAgICAgICAgICAgICAgIGlzSW5QcmltYXJ5S2V5OiBCb29sZWFuKGNvbHVtbi5wayksXG4gICAgICAgICAgICAgICAgbmFtZTogY29sdW1uTmFtZSxcbiAgICAgICAgICAgICAgICBudWxsYWJsZTogQm9vbGVhbihjb2x1bW4ubnVsbGFibGUpLFxuICAgICAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgICAgICB0YWJsZTogdGFibGVOYW1lLFxuICAgICAgICAgICAgICB9IGFzIGNvbnN0IHNhdGlzZmllcyBDb2x1bW4sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0sXG4gICAgICAgICAge30gYXMgVGFibGVbXCJjb2x1bW5zXCJdLFxuICAgICAgICApO1xuXG4gICAgICBpZiAoc2NoZW1hc1tzY2hlbWFdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2NoZW1hc1tzY2hlbWFdID0geyBuYW1lOiBzY2hlbWEsIHRhYmxlczoge30gfTtcbiAgICAgIH1cblxuICAgICAgc2NoZW1hc1tzY2hlbWFdLnRhYmxlc1t0YWJsZU5hbWVdID0geyBjb2x1bW5zOiBjb2x1bW5zUmVjb3JkLCBuYW1lOiB0YWJsZU5hbWUsIHNjaGVtYSB9O1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAgeyBmaWx0ZXJPcGVyYXRvcnMsIHF1ZXJ5LCBzY2hlbWFzOiB7fSwgdGltZXpvbmUgfSBzYXRpc2ZpZXMgQWRhcHRlckludHJvc3BlY3RSZXN1bHQgYXMgQWRhcHRlckludHJvc3BlY3RSZXN1bHQsXG4gICk7XG59XG5cbmNvbnN0IGZpbHRlck9wZXJhdG9ycyA9IFtcbiAgXCI9XCIsXG4gIFwiIT1cIixcbiAgXCI+XCIsXG4gIFwiPj1cIixcbiAgXCI8XCIsXG4gIFwiPD1cIixcbiAgXCJpc1wiLFxuICBcImlzIG5vdFwiLFxuICBcImxpa2VcIixcbiAgXCJub3QgbGlrZVwiLFxuXSBzYXRpc2ZpZXMgRmlsdGVyT3BlcmF0b3JbXTtcblxuLyoqXG4gKiBGb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tJbnRyb3NwZWN0KCkge1xuICBjb25zdCB0YWJsZXMgPSBtb2NrVGFibGVzUXVlcnkoKTtcbiAgY29uc3QgW3sgdGltZXpvbmUgfV0gPSBtb2NrVGltZXpvbmVRdWVyeSgpO1xuICBjb25zdCBxdWVyeSA9IHsgcGFyYW1ldGVyczogW10sIHNxbDogXCI8bW9ja2VkPlwiIH0gYXMgUXVlcnk7XG5cbiAgcmV0dXJuIGNyZWF0ZUludHJvc3BlY3Rpb24oeyB0YWJsZXMsIHRpbWV6b25lLCBxdWVyeSB9KSBhcyB7XG4gICAgLy8gYmVzdCBlZmZvcnQsIG5vIG5lZWQgZ28gb3ZlcmJvYXJkLlxuICAgIHNjaGVtYXM6IHtcbiAgICAgIFtLIGluICh0eXBlb2YgdGFibGVzKVtudW1iZXJdW1wic2NoZW1hXCJdXToge1xuICAgICAgICBuYW1lOiBLO1xuICAgICAgICB0YWJsZXM6IHtcbiAgICAgICAgICBbVCBpbiAodHlwZW9mIHRhYmxlcylbbnVtYmVyXVtcIm5hbWVcIl1dOiBUYWJsZTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfTtcbiAgICB0aW1lem9uZTogdHlwZW9mIHRpbWV6b25lO1xuICAgIGZpbHRlck9wZXJhdG9yczogRmlsdGVyT3BlcmF0b3JbXTtcbiAgICBxdWVyeTogUXVlcnk7XG4gIH0gc2F0aXNmaWVzIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0O1xufVxuIiwgImltcG9ydCB0eXBlIHsgRGF0YVR5cGUgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuXG5leHBvcnQgY29uc3QgTVlTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQTogUmVjb3JkPHN0cmluZywgUGljazxEYXRhVHlwZSwgXCJncm91cFwiPj4gPSB7XG4gIGJpZ2ludDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgYmluYXJ5OiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIGJpdDoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBibG9iOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIGNoYXI6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgXCJjaGFyIGJpbmFyeVwiOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIGRhdGU6IHtcbiAgICBncm91cDogXCJkYXRldGltZVwiLFxuICB9LFxuICBkYXRldGltZToge1xuICAgIGdyb3VwOiBcImRhdGV0aW1lXCIsXG4gIH0sXG4gIGRlYzoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgZGVjaW1hbDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgZG91YmxlOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBcImRvdWJsZSBwcmVjaXNpb25cIjoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgZW51bToge1xuICAgIGdyb3VwOiBcImVudW1cIixcbiAgfSxcbiAgZml4ZWQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGZsb2F0OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBnZW9tZXRyeToge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBnZW9tZXRyeWNvbGxlY3Rpb246IHtcbiAgICBncm91cDogXCJyYXdcIixcbiAgfSxcbiAgaW50OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBpbnRlZ2VyOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBqc29uOiB7XG4gICAgZ3JvdXA6IFwianNvblwiLFxuICB9LFxuICBsaW5lc3RyaW5nOiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIGxvbmc6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgXCJsb25nIHZhcmNoYXJcIjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBsb25nYmxvYjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBsb25ndGV4dDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBsb25ndmFyYmluYXJ5OiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIGxvbmd2YXJjaGFyOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIG1lZGl1bWJsb2I6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgbWVkaXVtaW50OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBtZWRpdW10ZXh0OiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIG11bHRpbGluZXN0cmluZzoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBtdWx0aXBvaW50OiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIG11bHRpcG9seWdvbjoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBudW1lcmljOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBwb2ludDoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBwb2x5Z29uOiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIHJlYWw6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBodHRwczovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi85LjUvZW4vc2V0Lmh0bWxcbiAgICovXG4gIHNldDoge1xuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICBzbWFsbGludDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgdGV4dDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICB0aW1lOiB7XG4gICAgZ3JvdXA6IFwidGltZVwiLFxuICB9LFxuICB0aW1lc3RhbXA6IHtcbiAgICBncm91cDogXCJkYXRldGltZVwiLFxuICB9LFxuICB0aW55YmxvYjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICB0aW55aW50OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICB0aW55dGV4dDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICB2YXJiaW5hcnk6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgdmFyY2hhcjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBcInZhcmNoYXIgYmluYXJ5XCI6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgLyoqXG4gICAqIGh0dHBzOi8vZGV2Lm15c3FsLmNvbS9kb2MvcmVmbWFuLzkuNS9lbi92ZWN0b3IuaHRtbFxuICAgKi9cbiAgdmVjdG9yOiB7XG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIHllYXI6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG59O1xuIiwgImltcG9ydCB7IHR5cGUgSW5mZXJSZXN1bHQsIHR5cGUgUmVmZXJlbmNlRXhwcmVzc2lvbiwgc3FsIH0gZnJvbSBcImt5c2VseVwiO1xuXG5pbXBvcnQgdHlwZSB7IEFkYXB0ZXJEZWxldGVEZXRhaWxzLCBBZGFwdGVySW5zZXJ0RGV0YWlscywgQWRhcHRlclF1ZXJ5RGV0YWlscywgQWRhcHRlclVwZGF0ZURldGFpbHMgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHtcbiAgYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMsXG4gIGFwcGx5VHJhbnNmb3JtYXRpb25zLFxuICB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsXG4gIGNvbXBpbGUsXG4gIGdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24sXG59IGZyb20gXCIuLi9xdWVyeVwiO1xuaW1wb3J0IHR5cGUgeyBCaWdJbnRTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZS11dGlsc1wiO1xuaW1wb3J0IHsgZ2V0TXlTUUxCdWlsZGVyIH0gZnJvbSBcIi4vYnVpbGRlclwiO1xuaW1wb3J0IHsgbW9ja1RhYmxlc1F1ZXJ5IH0gZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVsZXRlUXVlcnkoXG4gIGRldGFpbHM6IEFkYXB0ZXJEZWxldGVEZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHtcbiAgICByb3dzLFxuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSB9LFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID0gZ2V0TXlTUUxCdWlsZGVyPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcblxuICByZXR1cm4gY29tcGlsZShidWlsZGVyLmRlbGV0ZUZyb20odGFibGVOYW1lKS4kY2FsbChhcHBseUluZmVycmVkUm93RmlsdGVycyhyb3dzLCBjb2x1bW5zKSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5zZXJ0UXVlcnkoXG4gIF9kZXRhaWxzOiBBZGFwdGVySW5zZXJ0RGV0YWlscyxcbiAgX3JlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXBkYXRlUmVmZXRjaFF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyVXBkYXRlRGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgY2hhbmdlcyxcbiAgICByb3csXG4gICAgdGFibGU6IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRNeVNRTEJ1aWxkZXI8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC5zZWxlY3RGcm9tKHRhYmxlTmFtZSlcbiAgICAgIC4kY2FsbChhcHBseUluZmVycmVkUm93RmlsdGVycyhbeyAuLi5yb3csIGNoYW5nZXMgfV0sIGNvbHVtbnMpKVxuICAgICAgLnNlbGVjdChPYmplY3Qua2V5cyhjb2x1bW5zKSlcbiAgICAgIC5zZWxlY3QoZ2V0Q3VycmVudFRpbWVzdGFtcE1pbGxpcygpLmFzKFwiX19wc191cGRhdGVkX2F0X19cIikpLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0UXVlcnkoXG4gIGRldGFpbHM6IEFkYXB0ZXJRdWVyeURldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIGZpbHRlciA9IHsgYWZ0ZXI6IFwiYW5kXCIsIGZpbHRlcnM6IFtdLCBraW5kOiBcIkZpbHRlckdyb3VwXCIgfSxcbiAgICBwYWdlSW5kZXgsXG4gICAgcGFnZVNpemUsXG4gICAgc29ydE9yZGVyLFxuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSB9LFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID0gZ2V0TXlTUUxCdWlsZGVyPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcblxuICBjb25zdCBmaWx0ZXJFeHByZXNzaW9uID0gZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbihmaWx0ZXIuZmlsdGVycywgY29sdW1ucyk7XG5cbiAgY29uc3QgY291bnRRdWVyeSA9IGJ1aWxkZXJcbiAgICAuc2VsZWN0RnJvbSh0YWJsZU5hbWUpXG4gICAgLndoZXJlKGZpbHRlckV4cHJlc3Npb24pXG4gICAgLnNlbGVjdCgoZWIpID0+IGViLmNhc3Q8QmlnSW50U3RyaW5nPihlYi5mbi5jb2FsZXNjZShlYi5mbi5jb3VudEFsbCgpLCBzcWwubGl0KDApKSwgXCJ0ZXh0XCIpLmFzKFwidmFsdWVcIikpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC53aXRoKFwiY291bnRcIiwgKCkgPT4gY291bnRRdWVyeSlcbiAgICAgIC5zZWxlY3RGcm9tKFt0YWJsZU5hbWUsIFwiY291bnRcIl0pXG4gICAgICAvLyBUT0RPOiBjdXJzb3IgcGFnaW5hdGlvbj9cbiAgICAgIC53aGVyZShmaWx0ZXJFeHByZXNzaW9uKVxuICAgICAgLnNlbGVjdChPYmplY3Qua2V5cyhjb2x1bW5zKSlcbiAgICAgIC5zZWxlY3QoXG4gICAgICAgIHNxbFxuICAgICAgICAgIC5yZWY8QmlnSW50U3RyaW5nPihcbiAgICAgICAgICAgIFwiY291bnQudmFsdWVcIiBzYXRpc2ZpZXMgUmVmZXJlbmNlRXhwcmVzc2lvbjx7IGNvdW50OiBJbmZlclJlc3VsdDx0eXBlb2YgY291bnRRdWVyeT5bbnVtYmVyXSB9LCBcImNvdW50XCI+LFxuICAgICAgICAgIClcbiAgICAgICAgICAuYXMoXCJfX3BzX2NvdW50X19cIiksXG4gICAgICApXG4gICAgICAuJGNhbGwoKHFiKSA9PiBzb3J0T3JkZXIucmVkdWNlKChxYiwgaXRlbSkgPT4gcWIub3JkZXJCeShpdGVtLmNvbHVtbiwgaXRlbS5kaXJlY3Rpb24pLCBxYikpXG4gICAgICAubGltaXQocGFnZVNpemUpXG4gICAgICAvLyB3ZSdyZSBpbmplY3RpbmcgdGhlIG9mZnNldCB2YWx1ZSBoZXJlIHRvIGF2b2lkIHNlcmlhbGl6YXRpb24gY29tcGxleGl0eSAoYGJpZ2ludGAgaXMgYSBuby1nbyBmb3IgYEpTT04uc3RyaW5naWZ5YCkuXG4gICAgICAub2Zmc2V0KHNxbC5saXQoQmlnSW50KHBhZ2VJbmRleCkgKiBCaWdJbnQocGFnZVNpemUpKSksXG4gICk7XG59XG5cbi8qKlxuICogRm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrU2VsZWN0UXVlcnkoKSB7XG4gIC8vIFRPRE86IC4uLlxuICByZXR1cm4gW10gYXMgY29uc3Qgc2F0aXNmaWVzIHtcbiAgICAvLyBiZXN0IGVmZm9ydCBubyBuZWVkIHRvIGdvIG92ZXJib2FyZFxuICAgIFtLIGluIFJldHVyblR5cGU8dHlwZW9mIG1vY2tUYWJsZXNRdWVyeT5bMV1bXCJjb2x1bW5zXCJdW251bWJlcl1bXCJuYW1lXCJdIHwgXCJfX3BzX2NvdW50X19cIl06IHVua25vd247XG4gIH1bXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVwZGF0ZVF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyVXBkYXRlRGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgY2hhbmdlcyxcbiAgICByb3csXG4gICAgdGFibGU6IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lLCBzY2hlbWEgfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldE15U1FMQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KHJlcXVpcmVtZW50cyk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLndpdGhTY2hlbWEoc2NoZW1hKVxuICAgICAgLnVwZGF0ZVRhYmxlKHRhYmxlTmFtZSlcbiAgICAgIC5zZXQoYXBwbHlUcmFuc2Zvcm1hdGlvbnMoXCJ1cGRhdGVcIiwgY2hhbmdlcywgY29sdW1ucykpXG4gICAgICAuJGNhbGwoYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMoW3Jvd10sIGNvbHVtbnMpKSxcbiAgICAvLyAgIC5yZXR1cm5pbmcoT2JqZWN0LmtleXMoY29sdW1ucykpXG4gICAgLy8gICAucmV0dXJuaW5nKGdldEN1cnJlbnRUaW1lc3RhbXBNaWxsaXMoKS5hcyhcIl9fcHNfdXBkYXRlZF9hdF9fXCIpKSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFRpbWVzdGFtcE1pbGxpcygpIHtcbiAgcmV0dXJuIHNxbDxudW1iZXIgfCBzdHJpbmc+YGNhc3QodW5peF90aW1lc3RhbXAobm93KDMpKSAqIDEwMDAgYXMgdW5zaWduZWQpYDtcbn1cbiIsICJpbXBvcnQgeyB0eXBlIEt5c2VseSwgTXlzcWxBZGFwdGVyLCBNeXNxbFF1ZXJ5Q29tcGlsZXIgfSBmcm9tIFwia3lzZWx5XCI7XG5cbmltcG9ydCB7IHR5cGUgQnVpbGRlclJlcXVpcmVtZW50cywgZ2V0QnVpbGRlciB9IGZyb20gXCIuLi9xdWVyeVwiO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGZ1bmN0aW9uIGdldE15U1FMQnVpbGRlcjxEYXRhYmFzZSA9IGFueT4oXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pOiBLeXNlbHk8RGF0YWJhc2U+IHtcbiAgcmV0dXJuIGdldEJ1aWxkZXIoeyAuLi5yZXF1aXJlbWVudHMsIEFkYXB0ZXI6IE15c3FsQWRhcHRlciwgUXVlcnlDb21waWxlcjogTXlzcWxRdWVyeUNvbXBpbGVyIH0pO1xufVxuIiwgImltcG9ydCB7IHNxbCB9IGZyb20gXCJreXNlbHlcIjtcbmltcG9ydCB7IGpzb25BcnJheUZyb20gfSBmcm9tIFwia3lzZWx5L2hlbHBlcnMvbXlzcWxcIjtcblxuaW1wb3J0IHsgdHlwZSBCdWlsZGVyUmVxdWlyZW1lbnRzLCBjb21waWxlLCB0eXBlIFF1ZXJ5UmVzdWx0IH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgeyBnZXRNeVNRTEJ1aWxkZXIgfSBmcm9tIFwiLi9idWlsZGVyXCI7XG5cbmludGVyZmFjZSBEYXRhYmFzZSB7XG4gIC8qKiBodHRwczovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi84LjQvZW4vaW5mb3JtYXRpb24tc2NoZW1hLWNvbHVtbnMtdGFibGUuaHRtbCAqL1xuICBcImluZm9ybWF0aW9uX3NjaGVtYS5jb2x1bW5zXCI6IHtcbiAgICBUQUJMRV9TQ0hFTUE6IHN0cmluZztcbiAgICBUQUJMRV9OQU1FOiBzdHJpbmc7XG4gICAgQ09MVU1OX05BTUU6IHN0cmluZztcbiAgICAvKiogVGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4gd2l0aGluIHRoZSB0YWJsZS4gT1JESU5BTF9QT1NJVElPTiBpcyBuZWNlc3NhcnkgYmVjYXVzZSB5b3UgbWlnaHQgd2FudCB0byBzYXkgT1JERVIgQlkgT1JESU5BTF9QT1NJVElPTi4gVW5saWtlIFNIT1cgQ09MVU1OUywgU0VMRUNUIGZyb20gdGhlIENPTFVNTlMgdGFibGUgZG9lcyBub3QgaGF2ZSBhdXRvbWF0aWMgb3JkZXJpbmcuICovXG4gICAgT1JESU5BTF9QT1NJVElPTjogbnVtYmVyO1xuICAgIC8qKiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvbHVtbi4gVGhpcyBpcyBOVUxMIGlmIHRoZSBjb2x1bW4gaGFzIGFuIGV4cGxpY2l0IGRlZmF1bHQgb2YgTlVMTCwgb3IgaWYgdGhlIGNvbHVtbiBkZWZpbml0aW9uIGluY2x1ZGVzIG5vIERFRkFVTFQgY2xhdXNlLiAqL1xuICAgIENPTFVNTl9ERUZBVUxUOiB1bmtub3duO1xuICAgIElTX05VTExBQkxFOiBcIllFU1wiIHwgXCJOT1wiO1xuICAgIC8qKiBDb250YWlucyB0aGUgdHlwZSBuYW1lIGFuZCBwb3NzaWJseSBvdGhlciBpbmZvcm1hdGlvbiBzdWNoIGFzIHRoZSBwcmVjaXNpb24gb3IgbGVuZ3RoLiAqL1xuICAgIENPTFVNTl9UWVBFOiBzdHJpbmc7XG4gICAgLyoqIGVtcHR5IC0gbm90IGluZGV4ZWQgb3IgaXMgc2Vjb25kYXJ5IGNvbHVtbiBpbiBhIG11bHRpLWNvbHVtbiBub251bmlxdWUgaW5kZXguIFBSSSAtIHBhcnQgb2YgYSBwcmltYXJ5IGtleS4gVU5JIC0gZmlyc3QgY29sdW1uIG9mIGEgdW5pcXVlIGluZGV4LiBNVUwgLSBmaXJzdCBjb2x1bW4gb2YgYSBub251bmlxdWUgaW5kZXggKi9cbiAgICBDT0xVTU5fS0VZOiBcIlwiIHwgXCJQUklcIiB8IFwiVU5JXCIgfCBcIk1VTFwiO1xuICAgIC8qKiBFeHRyYSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29sdW1uLiBQb3NzaWJsZSB2YWx1ZXMgYXJlICovXG4gICAgRVhUUkE6XG4gICAgICB8IFwiXCJcbiAgICAgIHwgXCJhdXRvX2luY3JlbWVudFwiXG4gICAgICB8IFwib24gdXBkYXRlIENVUlJFTlRfVElNRVNUQU1QXCJcbiAgICAgIHwgXCJTVE9SRUQgR0VORVJBVEVEXCJcbiAgICAgIHwgXCJWSVJUVUFMIEdFTkVSQVRFRFwiXG4gICAgICB8IFwiREVGQVVMVCBHRU5FUkFURURcIjtcbiAgICAvKiogRm9yIGdlbmVyYXRlZCBjb2x1bW5zLCBkaXNwbGF5cyB0aGUgZXhwcmVzc2lvbiB1c2VkIHRvIGNvbXB1dGUgY29sdW1uIHZhbHVlcy4gRW1wdHkgZm9yIG5vbmdlbmVyYXRlZCBjb2x1bW5zLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgZ2VuZXJhdGVkIGNvbHVtbnMsIHNlZSBTZWN0aW9uIDE1LjEuMjAuOCwgXHUyMDFDQ1JFQVRFIFRBQkxFIGFuZCBHZW5lcmF0ZWQgQ29sdW1uc1x1MjAxRC4gKi9cbiAgICBHRU5FUkFUSU9OX0VYUFJFU1NJT046IHN0cmluZztcbiAgfTtcblxuICAvKiogaHR0cHM6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vOC40L2VuL2luZm9ybWF0aW9uLXNjaGVtYS10YWJsZXMtdGFibGUuaHRtbCAqL1xuICBcImluZm9ybWF0aW9uX3NjaGVtYS50YWJsZXNcIjoge1xuICAgIC8qKiBUaGUgbmFtZSBvZiB0aGUgc2NoZW1hIChkYXRhYmFzZSkgdG8gd2hpY2ggdGhlIHRhYmxlIGJlbG9uZ3MuICovXG4gICAgVEFCTEVfU0NIRU1BOiBzdHJpbmc7XG4gICAgVEFCTEVfTkFNRTogc3RyaW5nO1xuICAgIC8qKiBCQVNFIFRBQkxFIGZvciBhIHRhYmxlLCBWSUVXIGZvciBhIHZpZXcsIG9yIFNZU1RFTSBWSUVXIGZvciBhbiBJTkZPUk1BVElPTl9TQ0hFTUEgdGFibGUuICovXG4gICAgVEFCTEVfVFlQRTogXCJCQVNFIFRBQkxFXCIgfCBcIlZJRVdcIiB8IFwiU1lTVEVNIFZJRVdcIjtcbiAgfTtcblxuICAvKiogaHR0cHM6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vOC40L2VuL2luZm9ybWF0aW9uLXNjaGVtYS1rZXktY29sdW1uLXVzYWdlLXRhYmxlLmh0bWwgKi9cbiAgXCJpbmZvcm1hdGlvbl9zY2hlbWEuS0VZX0NPTFVNTl9VU0FHRVwiOiB7XG4gICAgQ09OU1RSQUlOVF9TQ0hFTUE6IHN0cmluZztcbiAgICBDT05TVFJBSU5UX05BTUU6IHN0cmluZztcbiAgICBUQUJMRV9TQ0hFTUE6IHN0cmluZztcbiAgICBUQUJMRV9OQU1FOiBzdHJpbmc7XG4gICAgQ09MVU1OX05BTUU6IHN0cmluZztcbiAgICAvKiogbnVsbCAtIHdoZW4gdW5pcXVlIG9yIHByaW1hcnkga2V5IGNvbnN0cmFpbnQuIDEtbiAtIHdoZW4gZm9yZWlnbiBrZXkgY29uc3RyYWludCAqL1xuICAgIFBPU0lUSU9OX0lOX1VOSVFVRV9DT05TVFJBSU5UOiBudW1iZXIgfCBudWxsO1xuICAgIFJFRkVSRU5DRURfVEFCTEVfU0NIRU1BOiBzdHJpbmc7XG4gICAgUkVGRVJFTkNFRF9UQUJMRV9OQU1FOiBzdHJpbmc7XG4gICAgUkVGRVJFTkNFRF9DT0xVTU5fTkFNRTogc3RyaW5nO1xuICB9O1xuXG4gIC8qKiBodHRwczovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi84LjQvZW4vaW5mb3JtYXRpb24tc2NoZW1hLXRhYmxlLWNvbnN0cmFpbnRzLXRhYmxlLmh0bWwgKi9cbiAgXCJpbmZvcm1hdGlvbl9zY2hlbWEuVEFCTEVfQ09OU1RSQUlOVFNcIjoge1xuICAgIENPTlNUUkFJTlRfU0NIRU1BOiBzdHJpbmc7XG4gICAgQ09OU1RSQUlOVF9OQU1FOiBzdHJpbmc7XG4gICAgVEFCTEVfU0NIRU1BOiBzdHJpbmc7XG4gICAgVEFCTEVfTkFNRTogc3RyaW5nO1xuICAgIENPTlNUUkFJTlRfVFlQRTogXCJQUklNQVJZIEtFWVwiIHwgXCJGT1JFSUdOIEtFWVwiIHwgXCJVTklRVUVcIiB8IFwiQ0hFQ0tcIjtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlc1F1ZXJ5KHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4pIHtcbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgZ2V0TXlTUUxCdWlsZGVyPERhdGFiYXNlPihyZXF1aXJlbWVudHMpXG4gICAgICAuc2VsZWN0RnJvbShcImluZm9ybWF0aW9uX3NjaGVtYS50YWJsZXMgYXMgdFwiKVxuICAgICAgLndoZXJlKFwidC5UQUJMRV9TQ0hFTUFcIiwgXCI9XCIsIHNxbDxzdHJpbmc+YGRhdGFiYXNlKClgKVxuICAgICAgLndoZXJlKFwidC5UQUJMRV9UWVBFXCIsIFwiaW5cIiwgW1wiQkFTRSBUQUJMRVwiLCBcIlZJRVdcIl0pXG4gICAgICAuc2VsZWN0KFtcInQuVEFCTEVfU0NIRU1BIGFzIHNjaGVtYVwiLCBcInQuVEFCTEVfTkFNRSBhcyBuYW1lXCIsIFwidC5UQUJMRV9UWVBFIGFzIHR5cGVcIl0pXG4gICAgICAuJG5hcnJvd1R5cGU8eyB0eXBlOiBcIkJBU0UgVEFCTEVcIiB8IFwiVklFV1wiIH0+KClcbiAgICAgIC5zZWxlY3QoKGViKSA9PlxuICAgICAgICAvLyBganNvbl9hcnJheWFnZ2AgaWdub3JlcyBgb3JkZXIgYnlgIGluc2lkZSB0aGUgc3VicXVlcnksIHNvIHdlIG5lZWQgdG8gb3JkZXIgYWZ0ZXIgYWdncmVnYXRpb24uXG4gICAgICAgIGpzb25BcnJheUZyb20oXG4gICAgICAgICAgZWJcbiAgICAgICAgICAgIC5zZWxlY3RGcm9tKFwiaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgYXMgY1wiKVxuICAgICAgICAgICAgLmxlZnRKb2luKFwiaW5mb3JtYXRpb25fc2NoZW1hLktFWV9DT0xVTU5fVVNBR0UgYXMga2N1XCIsIChqYikgPT5cbiAgICAgICAgICAgICAgamJcbiAgICAgICAgICAgICAgICAub25SZWYoXCJrY3UuVEFCTEVfU0NIRU1BXCIsIFwiPVwiLCBcImMuVEFCTEVfU0NIRU1BXCIpXG4gICAgICAgICAgICAgICAgLm9uUmVmKFwia2N1LlRBQkxFX05BTUVcIiwgXCI9XCIsIFwiYy5UQUJMRV9OQU1FXCIpXG4gICAgICAgICAgICAgICAgLm9uUmVmKFwia2N1LkNPTFVNTl9OQU1FXCIsIFwiPVwiLCBcImMuQ09MVU1OX05BTUVcIilcbiAgICAgICAgICAgICAgICAvLyBvbmx5IGdldCBmb3JlaWduIGtleSBjb25zdHJhaW50c1xuICAgICAgICAgICAgICAgIC5vbihcImtjdS5QT1NJVElPTl9JTl9VTklRVUVfQ09OU1RSQUlOVFwiLCBcImlzIG5vdFwiLCBudWxsKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC53aGVyZVJlZihcImMuVEFCTEVfU0NIRU1BXCIsIFwiPVwiLCBcInQuVEFCTEVfU0NIRU1BXCIpXG4gICAgICAgICAgICAud2hlcmVSZWYoXCJjLlRBQkxFX05BTUVcIiwgXCI9XCIsIFwidC5UQUJMRV9OQU1FXCIpXG4gICAgICAgICAgICAuc2VsZWN0KFtcbiAgICAgICAgICAgICAgXCJjLkNPTFVNTl9OQU1FIGFzIG5hbWVcIixcbiAgICAgICAgICAgICAgXCJjLkNPTFVNTl9UWVBFIGFzIGRhdGF0eXBlXCIsXG4gICAgICAgICAgICAgIFwiYy5PUkRJTkFMX1BPU0lUSU9OIGFzIHBvc2l0aW9uXCIsXG4gICAgICAgICAgICAgIFwia2N1LlJFRkVSRU5DRURfVEFCTEVfTkFNRSBhcyBma190YWJsZVwiLFxuICAgICAgICAgICAgICBcImtjdS5SRUZFUkVOQ0VEX0NPTFVNTl9OQU1FIGFzIGZrX2NvbHVtblwiLFxuICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIC5zZWxlY3QoKGViKSA9PiBbXG4gICAgICAgICAgICAgIGViKFwiYy5FWFRSQVwiLCBcIj1cIiwgXCJhdXRvX2luY3JlbWVudFwiKS5hcyhcImF1dG9pbmNyZW1lbnRcIiksXG4gICAgICAgICAgICAgIGViKFwiYy5FWFRSQVwiLCBcImluXCIsIFtcIm9uIHVwZGF0ZSBDVVJSRU5UX1RJTUVTVEFNUFwiLCBcIlNUT1JFRCBHRU5FUkFURURcIiwgXCJWSVJUVUFMIEdFTkVSQVRFRFwiXSkuYXMoXG4gICAgICAgICAgICAgICAgXCJjb21wdXRlZFwiLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBlYihcImMuQ09MVU1OX0tFWVwiLCBcIj1cIiwgXCJQUklcIikuYXMoXCJwa1wiKSxcbiAgICAgICAgICAgICAgZWIoXCJjLklTX05VTExBQkxFXCIsIFwiPVwiLCBcIllFU1wiKS5hcyhcIm51bGxhYmxlXCIpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICkuYXMoXCJjb2x1bW5zXCIpLFxuICAgICAgKVxuICAgICAgLm9yZGVyQnkoXCJ0LlRBQkxFX1NDSEVNQVwiKVxuICAgICAgLm9yZGVyQnkoXCJ0LlRBQkxFX05BTUVcIilcbiAgICAgIC5vcmRlckJ5KFwidC5UQUJMRV9UWVBFXCIpLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja1RhYmxlc1F1ZXJ5KCkge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9pbmNyZW1lbnQ6IDEsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiaW50XCIsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIG5hbWU6IFwiaWRcIixcbiAgICAgICAgICBudWxsYWJsZTogMCxcbiAgICAgICAgICBwazogMSxcbiAgICAgICAgICBwb3NpdGlvbjogMSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9pbmNyZW1lbnQ6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiYmluYXJ5KDE2KVwiLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBuYW1lOiBcInV1aWRcIixcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBwb3NpdGlvbjogMixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9pbmNyZW1lbnQ6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidmFyY2hhcigyNTUpXCIsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIHBvc2l0aW9uOiAzLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYXV0b2luY3JlbWVudDogMCxcbiAgICAgICAgICBjb21wdXRlZDogMSxcbiAgICAgICAgICBkYXRhdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgZmtfY29sdW1uOiBudWxsLFxuICAgICAgICAgIGZrX3RhYmxlOiBudWxsLFxuICAgICAgICAgIG5hbWU6IFwiaWRfbmFtZVwiLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIHBvc2l0aW9uOiA0LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIG5hbWU6IFwiYW5pbWFsc1wiLFxuICAgICAgc2NoZW1hOiBcInN0dWRpb1wiLFxuICAgICAgdHlwZTogXCJCQVNFIFRBQkxFXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvaW5jcmVtZW50OiAxLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIGRhdGF0eXBlOiBcImludFwiLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgICAgbnVsbGFibGU6IDAsXG4gICAgICAgICAgcGs6IDEsXG4gICAgICAgICAgcG9zaXRpb246IDEsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvaW5jcmVtZW50OiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRpbWVzdGFtcFwiLFxuICAgICAgICAgIGZrX2NvbHVtbjogbnVsbCxcbiAgICAgICAgICBma190YWJsZTogbnVsbCxcbiAgICAgICAgICBuYW1lOiBcImNyZWF0ZWRfYXRcIixcbiAgICAgICAgICBudWxsYWJsZTogMSxcbiAgICAgICAgICBwazogMCxcbiAgICAgICAgICBwb3NpdGlvbjogMixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGF1dG9pbmNyZW1lbnQ6IDAsXG4gICAgICAgICAgY29tcHV0ZWQ6IDAsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiZW51bSgnYWRtaW4nLCdtYWludGFpbmVyJywnbWVtYmVyJylcIixcbiAgICAgICAgICBma19jb2x1bW46IG51bGwsXG4gICAgICAgICAgZmtfdGFibGU6IG51bGwsXG4gICAgICAgICAgbmFtZTogXCJyb2xlXCIsXG4gICAgICAgICAgbnVsbGFibGU6IDAsXG4gICAgICAgICAgcGs6IDAsXG4gICAgICAgICAgcG9zaXRpb246IDMsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhdXRvaW5jcmVtZW50OiAwLFxuICAgICAgICAgIGNvbXB1dGVkOiAwLFxuICAgICAgICAgIGRhdGF0eXBlOiBcImludFwiLFxuICAgICAgICAgIGZrX2NvbHVtbjogXCJpZFwiLFxuICAgICAgICAgIGZrX3RhYmxlOiBcImFuaW1hbHNcIixcbiAgICAgICAgICBuYW1lOiBcImFuaW1hbF9pZFwiLFxuICAgICAgICAgIG51bGxhYmxlOiAxLFxuICAgICAgICAgIHBrOiAwLFxuICAgICAgICAgIHBvc2l0aW9uOiA0LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIG5hbWU6IFwidXNlcnNcIixcbiAgICAgIHNjaGVtYTogXCJzdHVkaW9cIixcbiAgICAgIHR5cGU6IFwiQkFTRSBUQUJMRVwiLFxuICAgIH0sXG4gIF0gYXMgY29uc3Qgc2F0aXNmaWVzIFF1ZXJ5UmVzdWx0PHR5cGVvZiBnZXRUYWJsZXNRdWVyeT47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lem9uZVF1ZXJ5KHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4pIHtcbiAgY29uc3QgYnVpbGRlciA9IGdldE15U1FMQnVpbGRlcihyZXF1aXJlbWVudHMpO1xuXG4gIGNvbnN0IHNlc3Npb25UeiA9IHNxbDxcIlNZU1RFTVwiIHwgKHN0cmluZyAmIHt9KT5gQEBzZXNzaW9uLnRpbWVfem9uZWA7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLnNlbGVjdE5vRnJvbShcbiAgICAgICAgYnVpbGRlclxuICAgICAgICAgIC5jYXNlKClcbiAgICAgICAgICAud2hlbihzZXNzaW9uVHosIFwiPVwiLCBcIlNZU1RFTVwiKVxuICAgICAgICAgIC50aGVuKHNxbDxzdHJpbmc+YEBAc3lzdGVtX3RpbWVfem9uZWApXG4gICAgICAgICAgLmVsc2Uoc2Vzc2lvblR6KVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC5hcyhcInRpbWV6b25lXCIpLFxuICAgICAgKVxuICAgICAgLiRuYXJyb3dUeXBlPHsgdGltZXpvbmU6IHN0cmluZyB9PigpLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja1RpbWV6b25lUXVlcnkoKSB7XG4gIHJldHVybiBbeyB0aW1lem9uZTogXCJVVENcIiB9XSBhcyBjb25zdCBzYXRpc2ZpZXMgUXVlcnlSZXN1bHQ8dHlwZW9mIGdldFRpbWV6b25lUXVlcnk+O1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9teXNxbC5kLnRzXCIgLz5cbmltcG9ydCB7IHNxbCB9IGZyb20gJy4uL3Jhdy1idWlsZGVyL3NxbC5qcyc7XG5pbXBvcnQgeyBnZXRKc29uT2JqZWN0QXJncyB9IGZyb20gJy4uL3V0aWwvanNvbi1vYmplY3QtYXJncy5qcyc7XG4vKipcbiAqIEEgTXlTUUwgaGVscGVyIGZvciBhZ2dyZWdhdGluZyBhIHN1YnF1ZXJ5IGludG8gYSBKU09OIGFycmF5LlxuICpcbiAqIE5PVEU6IFRoaXMgaGVscGVyIGlzIG9ubHkgZ3VhcmFudGVlZCB0byBmdWxseSB3b3JrIHdpdGggdGhlIGJ1aWx0LWluIGBNeXNxbERpYWxlY3RgLlxuICogV2hpbGUgdGhlIHByb2R1Y2VkIFNRTCBpcyBjb21wYXRpYmxlIHdpdGggYWxsIE15U1FMIGRhdGFiYXNlcywgc29tZSB0aGlyZC1wYXJ0eSBkaWFsZWN0c1xuICogbWF5IG5vdCBwYXJzZSB0aGUgbmVzdGVkIEpTT04gaW50byBhcnJheXMuIEluIHRoZXNlIGNhc2VzIHlvdSBjYW4gdXNlIHRoZSBidWlsdCBpblxuICogYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gIHRvIHBhcnNlIHRoZSByZXN1bHRzLlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqc29uQXJyYXlGcm9tIH0gZnJvbSAna3lzZWx5L2hlbHBlcnMvbXlzcWwnXG4gKlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gKiAgIC5zZWxlY3QoKGViKSA9PiBbXG4gKiAgICAgJ2lkJyxcbiAqICAgICBqc29uQXJyYXlGcm9tKFxuICogICAgICAgZWIuc2VsZWN0RnJvbSgncGV0JylcbiAqICAgICAgICAgLnNlbGVjdChbJ3BldC5pZCBhcyBwZXRfaWQnLCAncGV0Lm5hbWUnXSlcbiAqICAgICAgICAgLndoZXJlUmVmKCdwZXQub3duZXJfaWQnLCAnPScsICdwZXJzb24uaWQnKVxuICogICAgICAgICAub3JkZXJCeSgncGV0Lm5hbWUnKVxuICogICAgICkuYXMoJ3BldHMnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKlxuICogcmVzdWx0WzBdPy5pZFxuICogcmVzdWx0WzBdPy5wZXRzWzBdPy5wZXRfaWRcbiAqIHJlc3VsdFswXT8ucGV0c1swXT8ubmFtZVxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBgaWRgLCAoXG4gKiAgIHNlbGVjdCBjYXN0KGNvYWxlc2NlKGpzb25fYXJyYXlhZ2coanNvbl9vYmplY3QoXG4gKiAgICAgJ3BldF9pZCcsIGBhZ2dgLmBwZXRfaWRgLFxuICogICAgICduYW1lJywgYGFnZ2AuYG5hbWVgXG4gKiAgICkpLCAnW10nKSBhcyBqc29uKSBmcm9tIChcbiAqICAgICBzZWxlY3QgYHBldGAuYGlkYCBhcyBgcGV0X2lkYCwgYHBldGAuYG5hbWVgXG4gKiAgICAgZnJvbSBgcGV0YFxuICogICAgIHdoZXJlIGBwZXRgLmBvd25lcl9pZGAgPSBgcGVyc29uYC5gaWRgXG4gKiAgICAgb3JkZXIgYnkgYHBldGAuYG5hbWVgXG4gKiAgICkgYXMgYGFnZ2BcbiAqICkgYXMgYHBldHNgXG4gKiBmcm9tIGBwZXJzb25gXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25BcnJheUZyb20oZXhwcikge1xuICAgIHJldHVybiBzcWwgYChzZWxlY3QgY2FzdChjb2FsZXNjZShqc29uX2FycmF5YWdnKGpzb25fb2JqZWN0KCR7c3FsLmpvaW4oZ2V0TXlzcWxKc29uT2JqZWN0QXJncyhleHByLnRvT3BlcmF0aW9uTm9kZSgpLCAnYWdnJykpfSkpLCAnW10nKSBhcyBqc29uKSBmcm9tICR7ZXhwcn0gYXMgYWdnKWA7XG59XG4vKipcbiAqIEEgTXlTUUwgaGVscGVyIGZvciB0dXJuaW5nIGEgc3VicXVlcnkgaW50byBhIEpTT04gb2JqZWN0LlxuICpcbiAqIFRoZSBzdWJxdWVyeSBtdXN0IG9ubHkgcmV0dXJuIG9uZSByb3cuXG4gKlxuICogTk9URTogVGhpcyBoZWxwZXIgaXMgb25seSBndWFyYW50ZWVkIHRvIGZ1bGx5IHdvcmsgd2l0aCB0aGUgYnVpbHQtaW4gYE15c3FsRGlhbGVjdGAuXG4gKiBXaGlsZSB0aGUgcHJvZHVjZWQgU1FMIGlzIGNvbXBhdGlibGUgd2l0aCBhbGwgTXlTUUwgZGF0YWJhc2VzLCBzb21lIHRoaXJkLXBhcnR5IGRpYWxlY3RzXG4gKiBtYXkgbm90IHBhcnNlIHRoZSBuZXN0ZWQgSlNPTiBpbnRvIG9iamVjdHMuIEluIHRoZXNlIGNhc2VzIHlvdSBjYW4gdXNlIHRoZSBidWlsdCBpblxuICogYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gIHRvIHBhcnNlIHRoZSByZXN1bHRzLlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqc29uT2JqZWN0RnJvbSB9IGZyb20gJ2t5c2VseS9oZWxwZXJzL215c3FsJ1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICogICAuc2VsZWN0KChlYikgPT4gW1xuICogICAgICdpZCcsXG4gKiAgICAganNvbk9iamVjdEZyb20oXG4gKiAgICAgICBlYi5zZWxlY3RGcm9tKCdwZXQnKVxuICogICAgICAgICAuc2VsZWN0KFsncGV0LmlkIGFzIHBldF9pZCcsICdwZXQubmFtZSddKVxuICogICAgICAgICAud2hlcmVSZWYoJ3BldC5vd25lcl9pZCcsICc9JywgJ3BlcnNvbi5pZCcpXG4gKiAgICAgICAgIC53aGVyZSgncGV0LmlzX2Zhdm9yaXRlJywgJz0nLCB0cnVlKVxuICogICAgICkuYXMoJ2Zhdm9yaXRlX3BldCcpXG4gKiAgIF0pXG4gKiAgIC5leGVjdXRlKClcbiAqXG4gKiByZXN1bHRbMF0/LmlkXG4gKiByZXN1bHRbMF0/LmZhdm9yaXRlX3BldD8ucGV0X2lkXG4gKiByZXN1bHRbMF0/LmZhdm9yaXRlX3BldD8ubmFtZVxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBgaWRgLCAoXG4gKiAgIHNlbGVjdCBqc29uX29iamVjdChcbiAqICAgICAncGV0X2lkJywgYG9iamAuYHBldF9pZGAsXG4gKiAgICAgJ25hbWUnLCBgb2JqYC5gbmFtZWBcbiAqICAgKSBmcm9tIChcbiAqICAgICBzZWxlY3QgYHBldGAuYGlkYCBhcyBgcGV0X2lkYCwgYHBldGAuYG5hbWVgXG4gKiAgICAgZnJvbSBgcGV0YFxuICogICAgIHdoZXJlIGBwZXRgLmBvd25lcl9pZGAgPSBgcGVyc29uYC5gaWRgXG4gKiAgICAgYW5kIGBwZXRgLmBpc19mYXZvcml0ZWAgPSA/XG4gKiAgICkgYXMgb2JqXG4gKiApIGFzIGBmYXZvcml0ZV9wZXRgXG4gKiBmcm9tIGBwZXJzb25gXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25PYmplY3RGcm9tKGV4cHIpIHtcbiAgICByZXR1cm4gc3FsIGAoc2VsZWN0IGpzb25fb2JqZWN0KCR7c3FsLmpvaW4oZ2V0TXlzcWxKc29uT2JqZWN0QXJncyhleHByLnRvT3BlcmF0aW9uTm9kZSgpLCAnb2JqJykpfSkgZnJvbSAke2V4cHJ9IGFzIG9iailgO1xufVxuLyoqXG4gKiBUaGUgTXlTUUwgYGpzb25fb2JqZWN0YCBmdW5jdGlvbi5cbiAqXG4gKiBOT1RFOiBUaGlzIGhlbHBlciBpcyBvbmx5IGd1YXJhbnRlZWQgdG8gZnVsbHkgd29yayB3aXRoIHRoZSBidWlsdC1pbiBgTXlzcWxEaWFsZWN0YC5cbiAqIFdoaWxlIHRoZSBwcm9kdWNlZCBTUUwgaXMgY29tcGF0aWJsZSB3aXRoIGFsbCBNeVNRTCBkYXRhYmFzZXMsIHNvbWUgdGhpcmQtcGFydHkgZGlhbGVjdHNcbiAqIG1heSBub3QgcGFyc2UgdGhlIG5lc3RlZCBKU09OIGludG8gb2JqZWN0cy4gSW4gdGhlc2UgY2FzZXMgeW91IGNhbiB1c2UgdGhlIGJ1aWx0IGluXG4gKiBgUGFyc2VKU09OUmVzdWx0c1BsdWdpbmAgdG8gcGFyc2UgdGhlIHJlc3VsdHMuXG4gKlxuICogIyMjIEV4YW1wbGVzXG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICogICAuc2VsZWN0KChlYikgPT4gW1xuICogICAgICdpZCcsXG4gKiAgICAganNvbkJ1aWxkT2JqZWN0KHtcbiAqICAgICAgIGZpcnN0OiBlYi5yZWYoJ2ZpcnN0X25hbWUnKSxcbiAqICAgICAgIGxhc3Q6IGViLnJlZignbGFzdF9uYW1lJyksXG4gKiAgICAgICBmdWxsOiBlYi5mbignY29uY2F0JywgWydmaXJzdF9uYW1lJywgZWIudmFsKCcgJyksICdsYXN0X25hbWUnXSlcbiAqICAgICB9KS5hcygnbmFtZScpXG4gKiAgIF0pXG4gKiAgIC5leGVjdXRlKClcbiAqXG4gKiByZXN1bHRbMF0/LmlkXG4gKiByZXN1bHRbMF0/Lm5hbWUuZmlyc3RcbiAqIHJlc3VsdFswXT8ubmFtZS5sYXN0XG4gKiByZXN1bHRbMF0/Lm5hbWUuZnVsbFxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBcImlkXCIsIGpzb25fb2JqZWN0KFxuICogICAnZmlyc3QnLCBmaXJzdF9uYW1lLFxuICogICAnbGFzdCcsIGxhc3RfbmFtZSxcbiAqICAgJ2Z1bGwnLCBjb25jYXQoYGZpcnN0X25hbWVgLCA/LCBgbGFzdF9uYW1lYClcbiAqICkgYXMgXCJuYW1lXCJcbiAqIGZyb20gXCJwZXJzb25cIlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uQnVpbGRPYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIHNxbCBganNvbl9vYmplY3QoJHtzcWwuam9pbihPYmplY3Qua2V5cyhvYmopLmZsYXRNYXAoKGspID0+IFtzcWwubGl0KGspLCBvYmpba11dKSl9KWA7XG59XG5mdW5jdGlvbiBnZXRNeXNxbEpzb25PYmplY3RBcmdzKG5vZGUsIHRhYmxlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGdldEpzb25PYmplY3RBcmdzKG5vZGUsIHRhYmxlKTtcbiAgICB9XG4gICAgY2F0Y2gge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ015U1FMIGpzb25BcnJheUZyb20gYW5kIGpzb25PYmplY3RGcm9tIGZ1bmN0aW9ucyBjYW4gb25seSBoYW5kbGUgZXhwbGljaXQgc2VsZWN0aW9ucyBkdWUgdG8gbGltaXRhdGlvbnMgb2YgdGhlIGpzb25fb2JqZWN0IGZ1bmN0aW9uLiBzZWxlY3RBbGwoKSBpcyBub3QgYWxsb3dlZCBpbiB0aGUgc3VicXVlcnkuJyk7XG4gICAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7NlFBQUFBLElDQUFDLElDQUFDLElBRU8sSUFBTUMsRUFBd0UsQ0FDbkYsT0FBUSxDQUNOLE1BQU8sU0FDVCxFQUNBLE9BQVEsQ0FDTixNQUFPLFFBQ1QsRUFDQSxJQUFLLENBQ0gsTUFBTyxLQUNULEVBQ0EsS0FBTSxDQUNKLE1B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QVFHLENBQU0sRUFBSSxDQUFFLEtBQU1BLEVBQVEsT0FBUSxDQUFDLENBQUUsR0FHL0NILEVBQVFHLENBQU0sRUFBRSxPQUFPRCxDQUFTLEVBQUksQ0FBRSxRQUFTRSxFQUFlLEtBQU1GLEVBQVcsT0FBQUMsQ0FBTyxFQUUvRUwsQ0FDVCxFQUNBLENBQUUsZ0JBQUFlLEVBQWlCLE1BQUExQyxFQUFPLFFBQVMsQ0FBQyxFQUFHLFNBQUFjLENBQVMsQ0FDbEQsQ0FDRixDQUVBLElBQU00QixFQUFrQixDQUN0QixJQUNBLEtBQ0EsSUFDQSxLQUNBLElBQ0EsS0FDQSxLQUNBLFNBQ0EsT0FDQSxVQUNGLEVBS08sU0FBU0MsSUFBaUIsQ0FDL0IsSUFBTWhDLEVBQVNpQyxFQUFnQixFQUN6QixDQUFDLENBQUUsU0FBQTlCLENBQVMsQ0FBQyxFQUFJK0IsRUFBa0IsRUFHekMsT0FBTzlCLEVBQW9CLENBQUUsT0FBQUosRUFBUSxTQUFBRyxFQUFVLE1BRmpDLENBQUUsV0FBWSxDQUFDLEVBQUcsSUFBSyxVQUFXLENBRUssQ0FBQyxDQWN4RCIsCiAgIm5hbWVzIjogWyJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJNWVNRTF9EQVRBX1RZUEVTX1RPX01FVEFEQVRBIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImdldE15U1FMQnVpbGRlciIsICJyZXF1aXJlbWVudHMiLCAiZ2V0QnVpbGRlciIsICJNeXNxbEFkYXB0ZXIiLCAiTXlzcWxRdWVyeUNvbXBpbGVyIiwgImdldERlbGV0ZVF1ZXJ5IiwgImRldGFpbHMiLCAicmVxdWlyZW1lbnRzIiwgInJvd3MiLCAiY29sdW1ucyIsICJ0YWJsZU5hbWUiLCAiYnVpbGRlciIsICJnZXRNeVNRTEJ1aWxkZXIiLCAiY29tcGlsZSIsICJhcHBseUluZmVycmVkUm93RmlsdGVycyIsICJnZXRJbnNlcnRRdWVyeSIsICJfZGV0YWlscyIsICJfcmVxdWlyZW1lbnRzIiwgImdldFVwZGF0ZVJlZmV0Y2hRdWVyeSIsICJjaGFuZ2VzIiwgInJvdyIsICJnZXRDdXJyZW50VGltZXN0YW1wTWlsbGlzIiwgImdldFNlbGVjdFF1ZXJ5IiwgImZpbHRlciIsICJwYWdlSW5kZXgiLCAicGFnZVNpemUiLCAic29ydE9yZGVyIiwgImZpbHRlckV4cHJlc3Npb24iLCAiZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbiIsICJjb3VudFF1ZXJ5IiwgImViIiwgInNxbCIsICJxYiIsICJpdGVtIiwgIm1vY2tTZWxlY3RRdWVyeSIsICJnZXRVcGRhdGVRdWVyeSIsICJzY2hlbWEiLCAiYXBwbHlUcmFuc2Zvcm1hdGlvbnMiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAianNvbkFycmF5RnJvbSIsICJleHByIiwgInNxbCIsICJnZXRNeXNxbEpzb25PYmplY3RBcmdzIiwgImdldE15c3FsSnNvbk9iamVjdEFyZ3MiLCAibm9kZSIsICJ0YWJsZSIsICJnZXRKc29uT2JqZWN0QXJncyIsICJnZXRUYWJsZXNRdWVyeSIsICJyZXF1aXJlbWVudHMiLCAiY29tcGlsZSIsICJnZXRNeVNRTEJ1aWxkZXIiLCAic3FsIiwgImViIiwgImpzb25BcnJheUZyb20iLCAiamIiLCAibW9ja1RhYmxlc1F1ZXJ5IiwgImdldFRpbWV6b25lUXVlcnkiLCAiYnVpbGRlciIsICJzZXNzaW9uVHoiLCAibW9ja1RpbWV6b25lUXVlcnkiLCAiY3JlYXRlTXlTUUxBZGFwdGVyIiwgInJlcXVpcmVtZW50cyIsICJleGVjdXRvciIsICJvdGhlclJlcXVpcmVtZW50cyIsICJkZXRhaWxzIiwgIm9wdGlvbnMiLCAicXVlcnkiLCAiZ2V0RGVsZXRlUXVlcnkiLCAiZXJyb3IiLCAiY3JlYXRlQWRhcHRlckVycm9yIiwgIl9kZXRhaWxzIiwgIl9vcHRpb25zIiwgInRhYmxlc1F1ZXJ5IiwgImdldFRhYmxlc1F1ZXJ5IiwgInRpbWV6b25lUXVlcnkiLCAiZ2V0VGltZXpvbmVRdWVyeSIsICJ0YWJsZXNFcnJvciIsICJ0YWJsZXMiLCAidGltZXpvbmVFcnJvciIsICJ0aW1lem9uZXMiLCAidGltZXpvbmUiLCAiY3JlYXRlSW50cm9zcGVjdGlvbiIsICJnZXRTZWxlY3RRdWVyeSIsICJyZXN1bHRzIiwgInVwZGF0ZVF1ZXJ5IiwgImdldFVwZGF0ZVF1ZXJ5IiwgInJlZmV0Y2hRdWVyeSIsICJnZXRVcGRhdGVSZWZldGNoUXVlcnkiLCAidXBkYXRlRXJyb3IiLCAicmVmZXRjaFJlc3VsdCIsICJyZWZldGNoRXJyb3IiLCAicm93IiwgImFyZ3MiLCAicmVzdWx0IiwgInRhYmxlIiwgInNjaGVtYXMiLCAiY29sdW1ucyIsICJ0YWJsZU5hbWUiLCAic2NoZW1hIiwgImNvbHVtbnNSZWNvcmQiLCAiYSIsICJiIiwgImNvbHVtbiIsICJkYXRhdHlwZSIsICJjb2x1bW5OYW1lIiwgImluZGV4T2ZQYXJlbnRoZXNpcyIsICJzdHJpcHBlZERhdGFUeXBlIiwgIk1ZU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEEiLCAiZmlsdGVyT3BlcmF0b3JzIiwgIm1vY2tJbnRyb3NwZWN0IiwgIm1vY2tUYWJsZXNRdWVyeSIsICJtb2NrVGltZXpvbmVRdWVyeSJdCn0K
@@ -1,2 +1,2 @@
1
- "use strict";var c=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var q=Object.prototype.hasOwnProperty;var v=(e,r)=>{for(var o in r)c(e,o,{get:r[o],enumerable:!0})},Q=(e,r,o,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of w(r))!q.call(e,n)&&n!==o&&c(e,n,{get:()=>r[n],enumerable:!(t=P(r,n))||t.enumerable});return e};var g=e=>Q(c({},"__esModule",{value:!0}),e);var R={};v(R,{createMySQL2Executor:()=>h});module.exports=g(R);var l=class extends Error{constructor(){super("This operation was aborted"),this.name="AbortError"}};function a(){return[new l]}function x(e){return{parameters:[e],sql:"kill ?"}}function h(e){return{execute:async(r,o)=>{let{abortSignal:t}=o||{};if(!t)try{let[i]=await e.query(r.sql,r.parameters);return[null,i]}catch(i){return[i]}if(t.aborted)return a();let n,s;try{let i,y=new Promise(b=>i=b);t.addEventListener("abort",n=()=>i());let m=e.getConnection(),p=await Promise.race([m,y]);if(!p)return m.catch(()=>{}),a();if(s=p,t.aborted)return s.release(),a();let f=(s||e).query(r.sql,r.parameters),u=await Promise.race([f,y]);if(!u)return Promise.allSettled([k(e,u),f]).finally(()=>s?.release()),a();s.release();let[E]=u;return[null,E]}catch(i){return s?.release(),[i]}finally{n&&t?.removeEventListener("abort",n)}}}}async function k(e,r){let o=x(r);try{await e.query(o.sql,o.parameters)}catch(t){console.error("Failed to cancel query:",t)}}
2
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vZGF0YS9teXNxbDIvaW5kZXgudHMiLCAiLi4vLi4vLi4vZGF0YS9leGVjdXRvci50cyIsICIuLi8uLi8uLi9kYXRhL215c3FsLWNvcmUvdXRpbGl0eS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHR5cGUgeyBQb29sLCBQb29sQ29ubmVjdGlvbiB9IGZyb20gXCJteXNxbDIvcHJvbWlzZVwiO1xuXG5pbXBvcnQgeyB0eXBlIEV4ZWN1dG9yLCBnZXRBYm9ydFJlc3VsdCB9IGZyb20gXCIuLi9leGVjdXRvclwiO1xuaW1wb3J0IHsgZ2V0Q2FuY2VsUXVlcnkgfSBmcm9tIFwiLi4vbXlzcWwtY29yZS91dGlsaXR5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNeVNRTDJFeGVjdXRvcihwb29sOiBQb29sKTogRXhlY3V0b3Ige1xuICByZXR1cm4ge1xuICAgIGV4ZWN1dGU6IGFzeW5jIChxdWVyeSwgb3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgeyBhYm9ydFNpZ25hbCB9ID0gb3B0aW9ucyB8fCB7fTtcblxuICAgICAgaWYgKCFhYm9ydFNpZ25hbCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IFtyZXN1bHRdID0gYXdhaXQgcG9vbC5xdWVyeShxdWVyeS5zcWwsIHF1ZXJ5LnBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgcmV0dXJuIFtudWxsLCByZXN1bHQgYXMgbmV2ZXJdO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgIHJldHVybiBbZXJyb3IgYXMgRXJyb3JdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIHJldHVybiBnZXRBYm9ydFJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBsZXQgYWJvcnRMaXN0ZW5lcjogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IGNvbm5lY3Rpb246IFBvb2xDb25uZWN0aW9uIHwgdW5kZWZpbmVkO1xuXG4gICAgICB0cnkge1xuICAgICAgICBsZXQgYWJvcnRlZDogKCkgPT4gdm9pZDtcbiAgICAgICAgY29uc3QgYWJvcnRpb25Qcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IChhYm9ydGVkID0gcmVzb2x2ZSkpO1xuXG4gICAgICAgIGFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoYWJvcnRMaXN0ZW5lciA9ICgpID0+IGFib3J0ZWQoKSkpO1xuXG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb25Qcm9taXNlID0gcG9vbC5nZXRDb25uZWN0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgY29ubmVjdGlvblJlc3VsdCA9IGF3YWl0IFByb21pc2UucmFjZShbY29ubmVjdGlvblByb21pc2UsIGFib3J0aW9uUHJvbWlzZV0pO1xuXG4gICAgICAgIGlmICghY29ubmVjdGlvblJlc3VsdCkge1xuICAgICAgICAgIHZvaWQgY29ubmVjdGlvblByb21pc2UuY2F0Y2goKCkgPT4ge30pO1xuXG4gICAgICAgICAgcmV0dXJuIGdldEFib3J0UmVzdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25uZWN0aW9uID0gY29ubmVjdGlvblJlc3VsdDtcblxuICAgICAgICBpZiAoYWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgIGNvbm5lY3Rpb24ucmVsZWFzZSgpO1xuXG4gICAgICAgICAgcmV0dXJuIGdldEFib3J0UmVzdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBxdWVyeVByb21pc2UgPSAoY29ubmVjdGlvbiB8fCBwb29sKS5xdWVyeShxdWVyeS5zcWwsIHF1ZXJ5LnBhcmFtZXRlcnMpO1xuXG4gICAgICAgIGNvbnN0IHF1ZXJ5UmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtxdWVyeVByb21pc2UsIGFib3J0aW9uUHJvbWlzZV0pO1xuXG4gICAgICAgIGlmICghcXVlcnlSZXN1bHQpIHtcbiAgICAgICAgICAvLyBub3QgaW1wb3J0YW50IGVub3VnaCB0byBhd2FpdC5cbiAgICAgICAgICB2b2lkIFByb21pc2UuYWxsU2V0dGxlZChbY2FuY2VsUXVlcnkocG9vbCwgcXVlcnlSZXN1bHQpLCBxdWVyeVByb21pc2VdKS5maW5hbGx5KCgpID0+IGNvbm5lY3Rpb24/LnJlbGVhc2UoKSk7XG5cbiAgICAgICAgICByZXR1cm4gZ2V0QWJvcnRSZXN1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbm5lY3Rpb24ucmVsZWFzZSgpO1xuXG4gICAgICAgIGNvbnN0IFtyZXN1bHRdID0gcXVlcnlSZXN1bHQ7XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCByZXN1bHQgYXMgbmV2ZXJdO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgY29ubmVjdGlvbj8ucmVsZWFzZSgpO1xuXG4gICAgICAgIHJldHVybiBbZXJyb3IgYXMgRXJyb3JdO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKGFib3J0TGlzdGVuZXIpIHtcbiAgICAgICAgICBhYm9ydFNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0TGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2FuY2VsUXVlcnkocG9vbDogUG9vbCwgdGhyZWFkSWQ6IHVua25vd24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcXVlcnkgPSBnZXRDYW5jZWxRdWVyeSh0aHJlYWRJZCk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBwb29sLnF1ZXJ5KHF1ZXJ5LnNxbCwgcXVlcnkucGFyYW1ldGVycyk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjYW5jZWwgcXVlcnk6XCIsIGVycm9yKTtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgUXVlcnksIFF1ZXJ5UmVzdWx0IH0gZnJvbSBcIi4vcXVlcnlcIjtcbmltcG9ydCB0eXBlIHsgRWl0aGVyIH0gZnJvbSBcIi4vdHlwZS11dGlsc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dG9yIHtcbiAgZXhlY3V0ZTxUPihxdWVyeTogUXVlcnk8VD4sIG9wdGlvbnM/OiBFeGVjdXRlT3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEVycm9yLCBRdWVyeVJlc3VsdDxRdWVyeTxUPj4+Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRlT3B0aW9ucyB7XG4gIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbmV4cG9ydCBjbGFzcyBBYm9ydEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIlRoaXMgb3BlcmF0aW9uIHdhcyBhYm9ydGVkXCIpO1xuICAgIHRoaXMubmFtZSA9IFwiQWJvcnRFcnJvclwiO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBYm9ydFJlc3VsdCgpOiBbQWJvcnRFcnJvcl0ge1xuICByZXR1cm4gW25ldyBBYm9ydEVycm9yKCldO1xufVxuIiwgImltcG9ydCB0eXBlIHsgUXVlcnkgfSBmcm9tIFwiLi4vcXVlcnlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENhbmNlbFF1ZXJ5KHRocmVhZElkOiB1bmtub3duKTogUXVlcnk8dW5rbm93bj4ge1xuICByZXR1cm4ge1xuICAgIHBhcmFtZXRlcnM6IFt0aHJlYWRJZF0sXG4gICAgc3FsOiBcImtpbGwgP1wiLFxuICB9O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogInlhQUFBLElBQUFBLEVBQUEsR0FBQUMsRUFBQUQsRUFBQSwwQkFBQUUsSUFBQSxlQUFBQyxFQUFBSCxHQ1dPLElBQU1JLEVBQU4sY0FBeUIsS0FBTSxDQUNwQyxhQUFjLENBQ1osTUFBTSw0QkFBNEIsRUFDbEMsS0FBSyxLQUFPLFlBQ2QsQ0FDRixFQUVPLFNBQVNDLEdBQStCLENBQzdDLE1BQU8sQ0FBQyxJQUFJRCxDQUFZLENBQzFCLENDbEJPLFNBQVNFLEVBQWVDLEVBQW1DLENBQ2hFLE1BQU8sQ0FDTCxXQUFZLENBQUNBLENBQVEsRUFDckIsSUFBSyxRQUNQLENBQ0YsQ0ZGTyxTQUFTQyxFQUFxQkMsRUFBc0IsQ0FDekQsTUFBTyxDQUNMLFFBQVMsTUFBT0MsRUFBT0MsSUFBWSxDQUNqQyxHQUFNLENBQUUsWUFBQUMsQ0FBWSxFQUFJRCxHQUFXLENBQUMsRUFFcEMsR0FBSSxDQUFDQyxFQUNILEdBQUksQ0FDRixHQUFNLENBQUNDLENBQU0sRUFBSSxNQUFNSixFQUFLLE1BQU1DLEVBQU0sSUFBS0EsRUFBTSxVQUFVLEVBRTdELE1BQU8sQ0FBQyxLQUFNRyxDQUFlLENBQy9CLE9BQVNDLEVBQWdCLENBQ3ZCLE1BQU8sQ0FBQ0EsQ0FBYyxDQUN4QixDQUdGLEdBQUlGLEVBQVksUUFDZCxPQUFPRyxFQUFlLEVBR3hCLElBQUlDLEVBQ0FDLEVBRUosR0FBSSxDQUNGLElBQUlDLEVBQ0VDLEVBQWtCLElBQUksUUFBZUMsR0FBYUYsRUFBVUUsQ0FBUSxFQUUxRVIsRUFBWSxpQkFBaUIsUUFBVUksRUFBZ0IsSUFBTUUsRUFBUSxDQUFFLEVBRXZFLElBQU1HLEVBQW9CWixFQUFLLGNBQWMsRUFFdkNhLEVBQW1CLE1BQU0sUUFBUSxLQUFLLENBQUNELEVBQW1CRixDQUFlLENBQUMsRUFFaEYsR0FBSSxDQUFDRyxFQUNILE9BQUtELEVBQWtCLE1BQU0sSUFBTSxDQUFDLENBQUMsRUFFOUJOLEVBQWUsRUFLeEIsR0FGQUUsRUFBYUssRUFFVFYsRUFBWSxRQUNkLE9BQUFLLEVBQVcsUUFBUSxFQUVaRixFQUFlLEVBR3hCLElBQU1RLEdBQWdCTixHQUFjUixHQUFNLE1BQU1DLEVBQU0sSUFBS0EsRUFBTSxVQUFVLEVBRXJFYyxFQUFjLE1BQU0sUUFBUSxLQUFLLENBQUNELEVBQWNKLENBQWUsQ0FBQyxFQUV0RSxHQUFJLENBQUNLLEVBRUgsT0FBSyxRQUFRLFdBQVcsQ0FBQ0MsRUFBWWhCLEVBQU1lLENBQVcsRUFBR0QsQ0FBWSxDQUFDLEVBQUUsUUFBUSxJQUFNTixHQUFZLFFBQVEsQ0FBQyxFQUVwR0YsRUFBZSxFQUd4QkUsRUFBVyxRQUFRLEVBRW5CLEdBQU0sQ0FBQ0osQ0FBTSxFQUFJVyxFQUVqQixNQUFPLENBQUMsS0FBTVgsQ0FBZSxDQUMvQixPQUFTQyxFQUFnQixDQUN2QixPQUFBRyxHQUFZLFFBQVEsRUFFYixDQUFDSCxDQUFjLENBQ3hCLFFBQUUsQ0FDSUUsR0FDRkosR0FBYSxvQkFBb0IsUUFBU0ksQ0FBYSxDQUUzRCxDQUNGLENBQ0YsQ0FDRixDQUVBLGVBQWVTLEVBQVloQixFQUFZaUIsRUFBa0MsQ0FDdkUsSUFBTWhCLEVBQVFpQixFQUFlRCxDQUFRLEVBRXJDLEdBQUksQ0FDRixNQUFNakIsRUFBSyxNQUFNQyxFQUFNLElBQUtBLEVBQU0sVUFBVSxDQUM5QyxPQUFTSSxFQUFnQixDQUN2QixRQUFRLE1BQU0sMEJBQTJCQSxDQUFLLENBQ2hELENBQ0YiLAogICJuYW1lcyI6IFsibXlzcWwyX2V4cG9ydHMiLCAiX19leHBvcnQiLCAiY3JlYXRlTXlTUUwyRXhlY3V0b3IiLCAiX190b0NvbW1vbkpTIiwgIkFib3J0RXJyb3IiLCAiZ2V0QWJvcnRSZXN1bHQiLCAiZ2V0Q2FuY2VsUXVlcnkiLCAidGhyZWFkSWQiLCAiY3JlYXRlTXlTUUwyRXhlY3V0b3IiLCAicG9vbCIsICJxdWVyeSIsICJvcHRpb25zIiwgImFib3J0U2lnbmFsIiwgInJlc3VsdCIsICJlcnJvciIsICJnZXRBYm9ydFJlc3VsdCIsICJhYm9ydExpc3RlbmVyIiwgImNvbm5lY3Rpb24iLCAiYWJvcnRlZCIsICJhYm9ydGlvblByb21pc2UiLCAicmVzb2x2ZSIsICJjb25uZWN0aW9uUHJvbWlzZSIsICJjb25uZWN0aW9uUmVzdWx0IiwgInF1ZXJ5UHJvbWlzZSIsICJxdWVyeVJlc3VsdCIsICJjYW5jZWxRdWVyeSIsICJ0aHJlYWRJZCIsICJnZXRDYW5jZWxRdWVyeSJdCn0K
1
+ "use strict";var c=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var b=Object.prototype.hasOwnProperty;var w=(e,r)=>{for(var o in r)c(e,o,{get:r[o],enumerable:!0})},v=(e,r,o,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of P(r))!b.call(e,n)&&n!==o&&c(e,n,{get:()=>r[n],enumerable:!(t=q(r,n))||t.enumerable});return e};var S=e=>v(c({},"__esModule",{value:!0}),e);var R={};w(R,{createMySQL2Executor:()=>h});module.exports=S(R);var l=class extends Error{constructor(){super("This operation was aborted"),this.name="AbortError"}};function s(){return[new l]}function E(e){return{parameters:[e],sql:"kill ?"}}function h(e){return{execute:async(r,o)=>{let{abortSignal:t}=o||{};if(!t)try{let[u]=await e.query(r.sql,r.parameters);return[null,u]}catch(u){return[u]}if(t.aborted)return s();let n,i;try{let u,y=new Promise(Q=>u=Q);t.addEventListener("abort",n=()=>u());let m=e.getConnection(),p=await Promise.race([m,y]);if(!p)return m.catch(()=>{}),s();if(i=p,t.aborted)return i.release(),s();let f=(i||e).query(r.sql,r.parameters),a=await Promise.race([f,y]);if(!a)return Promise.allSettled([g(e,a),f]).finally(()=>i?.release()),s();i.release();let[d]=a;return[null,d]}catch(u){return i?.release(),[u]}finally{n&&t?.removeEventListener("abort",n)}}}}async function g(e,r){let o=E(r);try{await e.query(o.sql,o.parameters)}catch(t){console.error("Failed to cancel query:",t)}}
2
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vZGF0YS9teXNxbDIvaW5kZXgudHMiLCAiLi4vLi4vLi4vZGF0YS9leGVjdXRvci50cyIsICIuLi8uLi8uLi9kYXRhL215c3FsLWNvcmUvdXRpbGl0eS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHR5cGUgeyBQb29sLCBQb29sQ29ubmVjdGlvbiB9IGZyb20gXCJteXNxbDIvcHJvbWlzZVwiO1xuXG5pbXBvcnQgeyB0eXBlIEV4ZWN1dG9yLCBnZXRBYm9ydFJlc3VsdCB9IGZyb20gXCIuLi9leGVjdXRvclwiO1xuaW1wb3J0IHsgZ2V0Q2FuY2VsUXVlcnkgfSBmcm9tIFwiLi4vbXlzcWwtY29yZS91dGlsaXR5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNeVNRTDJFeGVjdXRvcihwb29sOiBQb29sKTogRXhlY3V0b3Ige1xuICByZXR1cm4ge1xuICAgIGV4ZWN1dGU6IGFzeW5jIChxdWVyeSwgb3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgeyBhYm9ydFNpZ25hbCB9ID0gb3B0aW9ucyB8fCB7fTtcblxuICAgICAgaWYgKCFhYm9ydFNpZ25hbCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IFtyZXN1bHRdID0gYXdhaXQgcG9vbC5xdWVyeShxdWVyeS5zcWwsIHF1ZXJ5LnBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgcmV0dXJuIFtudWxsLCByZXN1bHQgYXMgbmV2ZXJdO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgIHJldHVybiBbZXJyb3IgYXMgRXJyb3JdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIHJldHVybiBnZXRBYm9ydFJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBsZXQgYWJvcnRMaXN0ZW5lcjogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICAgICAgbGV0IGNvbm5lY3Rpb246IFBvb2xDb25uZWN0aW9uIHwgdW5kZWZpbmVkO1xuXG4gICAgICB0cnkge1xuICAgICAgICBsZXQgYWJvcnRlZDogKCkgPT4gdm9pZDtcbiAgICAgICAgY29uc3QgYWJvcnRpb25Qcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IChhYm9ydGVkID0gcmVzb2x2ZSkpO1xuXG4gICAgICAgIGFib3J0U2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoYWJvcnRMaXN0ZW5lciA9ICgpID0+IGFib3J0ZWQoKSkpO1xuXG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb25Qcm9taXNlID0gcG9vbC5nZXRDb25uZWN0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgY29ubmVjdGlvblJlc3VsdCA9IGF3YWl0IFByb21pc2UucmFjZShbY29ubmVjdGlvblByb21pc2UsIGFib3J0aW9uUHJvbWlzZV0pO1xuXG4gICAgICAgIGlmICghY29ubmVjdGlvblJlc3VsdCkge1xuICAgICAgICAgIHZvaWQgY29ubmVjdGlvblByb21pc2UuY2F0Y2goKCkgPT4ge30pO1xuXG4gICAgICAgICAgcmV0dXJuIGdldEFib3J0UmVzdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25uZWN0aW9uID0gY29ubmVjdGlvblJlc3VsdDtcblxuICAgICAgICBpZiAoYWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICAgIGNvbm5lY3Rpb24ucmVsZWFzZSgpO1xuXG4gICAgICAgICAgcmV0dXJuIGdldEFib3J0UmVzdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBxdWVyeVByb21pc2UgPSAoY29ubmVjdGlvbiB8fCBwb29sKS5xdWVyeShxdWVyeS5zcWwsIHF1ZXJ5LnBhcmFtZXRlcnMpO1xuXG4gICAgICAgIGNvbnN0IHF1ZXJ5UmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtxdWVyeVByb21pc2UsIGFib3J0aW9uUHJvbWlzZV0pO1xuXG4gICAgICAgIGlmICghcXVlcnlSZXN1bHQpIHtcbiAgICAgICAgICAvLyBub3QgaW1wb3J0YW50IGVub3VnaCB0byBhd2FpdC5cbiAgICAgICAgICB2b2lkIFByb21pc2UuYWxsU2V0dGxlZChbY2FuY2VsUXVlcnkocG9vbCwgcXVlcnlSZXN1bHQpLCBxdWVyeVByb21pc2VdKS5maW5hbGx5KCgpID0+IGNvbm5lY3Rpb24/LnJlbGVhc2UoKSk7XG5cbiAgICAgICAgICByZXR1cm4gZ2V0QWJvcnRSZXN1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbm5lY3Rpb24ucmVsZWFzZSgpO1xuXG4gICAgICAgIGNvbnN0IFtyZXN1bHRdID0gcXVlcnlSZXN1bHQ7XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCByZXN1bHQgYXMgbmV2ZXJdO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgY29ubmVjdGlvbj8ucmVsZWFzZSgpO1xuXG4gICAgICAgIHJldHVybiBbZXJyb3IgYXMgRXJyb3JdO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKGFib3J0TGlzdGVuZXIpIHtcbiAgICAgICAgICBhYm9ydFNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0TGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2FuY2VsUXVlcnkocG9vbDogUG9vbCwgdGhyZWFkSWQ6IHVua25vd24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcXVlcnkgPSBnZXRDYW5jZWxRdWVyeSh0aHJlYWRJZCk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBwb29sLnF1ZXJ5KHF1ZXJ5LnNxbCwgcXVlcnkucGFyYW1ldGVycyk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjYW5jZWwgcXVlcnk6XCIsIGVycm9yKTtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgUXVlcnksIFF1ZXJ5UmVzdWx0IH0gZnJvbSBcIi4vcXVlcnlcIjtcbmltcG9ydCB0eXBlIHsgRWl0aGVyIH0gZnJvbSBcIi4vdHlwZS11dGlsc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dG9yIHtcbiAgZXhlY3V0ZTxUPihxdWVyeTogUXVlcnk8VD4sIG9wdGlvbnM/OiBFeGVjdXRlT3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEVycm9yLCBRdWVyeVJlc3VsdDxRdWVyeTxUPj4+Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXF1ZW5jZUV4ZWN1dG9yIGV4dGVuZHMgRXhlY3V0b3Ige1xuICBleGVjdXRlU2VxdWVuY2U8VCwgUz4oXG4gICAgcXVlcnk6IFtRdWVyeTxUPiwgUXVlcnk8Uz5dLFxuICAgIG9wdGlvbnM/OiBFeGVjdXRlT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxbW0Vycm9yXV0gfCBbW251bGwsIFF1ZXJ5UmVzdWx0PFF1ZXJ5PFQ+Pl0sIEVpdGhlcjxFcnJvciwgUXVlcnlSZXN1bHQ8UXVlcnk8Uz4+Pl0+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGVPcHRpb25zIHtcbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcbn1cblxuZXhwb3J0IGNsYXNzIEFib3J0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiVGhpcyBvcGVyYXRpb24gd2FzIGFib3J0ZWRcIik7XG4gICAgdGhpcy5uYW1lID0gXCJBYm9ydEVycm9yXCI7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFib3J0UmVzdWx0KCk6IFtBYm9ydEVycm9yXSB7XG4gIHJldHVybiBbbmV3IEFib3J0RXJyb3IoKV07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBRdWVyeSB9IGZyb20gXCIuLi9xdWVyeVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2FuY2VsUXVlcnkodGhyZWFkSWQ6IHVua25vd24pOiBRdWVyeTx1bmtub3duPiB7XG4gIHJldHVybiB7XG4gICAgcGFyYW1ldGVyczogW3RocmVhZElkXSxcbiAgICBzcWw6IFwia2lsbCA/XCIsXG4gIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAieWFBQUEsSUFBQUEsRUFBQSxHQUFBQyxFQUFBRCxFQUFBLDBCQUFBRSxJQUFBLGVBQUFDLEVBQUFILEdDa0JPLElBQU1JLEVBQU4sY0FBeUIsS0FBTSxDQUNwQyxhQUFjLENBQ1osTUFBTSw0QkFBNEIsRUFDbEMsS0FBSyxLQUFPLFlBQ2QsQ0FDRixFQUVPLFNBQVNDLEdBQStCLENBQzdDLE1BQU8sQ0FBQyxJQUFJRCxDQUFZLENBQzFCLENDekJPLFNBQVNFLEVBQWVDLEVBQW1DLENBQ2hFLE1BQU8sQ0FDTCxXQUFZLENBQUNBLENBQVEsRUFDckIsSUFBSyxRQUNQLENBQ0YsQ0ZGTyxTQUFTQyxFQUFxQkMsRUFBc0IsQ0FDekQsTUFBTyxDQUNMLFFBQVMsTUFBT0MsRUFBT0MsSUFBWSxDQUNqQyxHQUFNLENBQUUsWUFBQUMsQ0FBWSxFQUFJRCxHQUFXLENBQUMsRUFFcEMsR0FBSSxDQUFDQyxFQUNILEdBQUksQ0FDRixHQUFNLENBQUNDLENBQU0sRUFBSSxNQUFNSixFQUFLLE1BQU1DLEVBQU0sSUFBS0EsRUFBTSxVQUFVLEVBRTdELE1BQU8sQ0FBQyxLQUFNRyxDQUFlLENBQy9CLE9BQVNDLEVBQWdCLENBQ3ZCLE1BQU8sQ0FBQ0EsQ0FBYyxDQUN4QixDQUdGLEdBQUlGLEVBQVksUUFDZCxPQUFPRyxFQUFlLEVBR3hCLElBQUlDLEVBQ0FDLEVBRUosR0FBSSxDQUNGLElBQUlDLEVBQ0VDLEVBQWtCLElBQUksUUFBZUMsR0FBYUYsRUFBVUUsQ0FBUSxFQUUxRVIsRUFBWSxpQkFBaUIsUUFBVUksRUFBZ0IsSUFBTUUsRUFBUSxDQUFFLEVBRXZFLElBQU1HLEVBQW9CWixFQUFLLGNBQWMsRUFFdkNhLEVBQW1CLE1BQU0sUUFBUSxLQUFLLENBQUNELEVBQW1CRixDQUFlLENBQUMsRUFFaEYsR0FBSSxDQUFDRyxFQUNILE9BQUtELEVBQWtCLE1BQU0sSUFBTSxDQUFDLENBQUMsRUFFOUJOLEVBQWUsRUFLeEIsR0FGQUUsRUFBYUssRUFFVFYsRUFBWSxRQUNkLE9BQUFLLEVBQVcsUUFBUSxFQUVaRixFQUFlLEVBR3hCLElBQU1RLEdBQWdCTixHQUFjUixHQUFNLE1BQU1DLEVBQU0sSUFBS0EsRUFBTSxVQUFVLEVBRXJFYyxFQUFjLE1BQU0sUUFBUSxLQUFLLENBQUNELEVBQWNKLENBQWUsQ0FBQyxFQUV0RSxHQUFJLENBQUNLLEVBRUgsT0FBSyxRQUFRLFdBQVcsQ0FBQ0MsRUFBWWhCLEVBQU1lLENBQVcsRUFBR0QsQ0FBWSxDQUFDLEVBQUUsUUFBUSxJQUFNTixHQUFZLFFBQVEsQ0FBQyxFQUVwR0YsRUFBZSxFQUd4QkUsRUFBVyxRQUFRLEVBRW5CLEdBQU0sQ0FBQ0osQ0FBTSxFQUFJVyxFQUVqQixNQUFPLENBQUMsS0FBTVgsQ0FBZSxDQUMvQixPQUFTQyxFQUFnQixDQUN2QixPQUFBRyxHQUFZLFFBQVEsRUFFYixDQUFDSCxDQUFjLENBQ3hCLFFBQUUsQ0FDSUUsR0FDRkosR0FBYSxvQkFBb0IsUUFBU0ksQ0FBYSxDQUUzRCxDQUNGLENBQ0YsQ0FDRixDQUVBLGVBQWVTLEVBQVloQixFQUFZaUIsRUFBa0MsQ0FDdkUsSUFBTWhCLEVBQVFpQixFQUFlRCxDQUFRLEVBRXJDLEdBQUksQ0FDRixNQUFNakIsRUFBSyxNQUFNQyxFQUFNLElBQUtBLEVBQU0sVUFBVSxDQUM5QyxPQUFTSSxFQUFnQixDQUN2QixRQUFRLE1BQU0sMEJBQTJCQSxDQUFLLENBQ2hELENBQ0YiLAogICJuYW1lcyI6IFsibXlzcWwyX2V4cG9ydHMiLCAiX19leHBvcnQiLCAiY3JlYXRlTXlTUUwyRXhlY3V0b3IiLCAiX190b0NvbW1vbkpTIiwgIkFib3J0RXJyb3IiLCAiZ2V0QWJvcnRSZXN1bHQiLCAiZ2V0Q2FuY2VsUXVlcnkiLCAidGhyZWFkSWQiLCAiY3JlYXRlTXlTUUwyRXhlY3V0b3IiLCAicG9vbCIsICJxdWVyeSIsICJvcHRpb25zIiwgImFib3J0U2lnbmFsIiwgInJlc3VsdCIsICJlcnJvciIsICJnZXRBYm9ydFJlc3VsdCIsICJhYm9ydExpc3RlbmVyIiwgImNvbm5lY3Rpb24iLCAiYWJvcnRlZCIsICJhYm9ydGlvblByb21pc2UiLCAicmVzb2x2ZSIsICJjb25uZWN0aW9uUHJvbWlzZSIsICJjb25uZWN0aW9uUmVzdWx0IiwgInF1ZXJ5UHJvbWlzZSIsICJxdWVyeVJlc3VsdCIsICJjYW5jZWxRdWVyeSIsICJ0aHJlYWRJZCIsICJnZXRDYW5jZWxRdWVyeSJdCn0K
@@ -1,5 +1,5 @@
1
1
  import { Pool } from 'mysql2/promise';
2
- import { E as Executor } from '../../index-2horhMcs.cjs';
2
+ import { E as Executor } from '../../index-CV9DQF9a.cjs';
3
3
  import 'kysely';
4
4
 
5
5
  declare function createMySQL2Executor(pool: Pool): Executor;
@@ -1,5 +1,5 @@
1
1
  import { Pool } from 'mysql2/promise';
2
- import { E as Executor } from '../../index-2horhMcs.js';
2
+ import { E as Executor } from '../../index-CV9DQF9a.js';
3
3
  import 'kysely';
4
4
 
5
5
  declare function createMySQL2Executor(pool: Pool): Executor;
@@ -6,5 +6,5 @@ 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 f}from"../../chunk-ZUEQ555M.js";import{b as a}from"../../chunk-AHIV4VYN.js";import{e as y}from"../../chunk-GDQBQ7MK.js";y();function E(t){return{execute:async(n,i)=>{let{abortSignal:r}=i||{};if(!r)try{let[e]=await t.query(n.sql,n.parameters);return[null,e]}catch(e){return[e]}if(r.aborted)return a();let s,o;try{let e,l=new Promise(v=>e=v);r.addEventListener("abort",s=()=>e());let u=t.getConnection(),m=await Promise.race([u,l]);if(!m)return u.catch(()=>{}),a();if(o=m,r.aborted)return o.release(),a();let d=(o||t).query(n.sql,n.parameters),c=await Promise.race([d,l]);if(!c)return Promise.allSettled([b(t,c),d]).finally(()=>o?.release()),a();o.release();let[P]=c;return[null,P]}catch(e){return o?.release(),[e]}finally{s&&r?.removeEventListener("abort",s)}}}}async function b(t,n){let i=f(n);try{await t.query(i.sql,i.parameters)}catch(r){console.error("Failed to cancel query:",r)}}export{E as createMySQL2Executor};
9
+ import{a as f}from"../../chunk-ZUEQ555M.js";import{b as a}from"../../chunk-NQGSK3IM.js";import{e as y}from"../../chunk-GDQBQ7MK.js";y();function E(t){return{execute:async(n,i)=>{let{abortSignal:r}=i||{};if(!r)try{let[e]=await t.query(n.sql,n.parameters);return[null,e]}catch(e){return[e]}if(r.aborted)return a();let s,o;try{let e,l=new Promise(v=>e=v);r.addEventListener("abort",s=()=>e());let u=t.getConnection(),m=await Promise.race([u,l]);if(!m)return u.catch(()=>{}),a();if(o=m,r.aborted)return o.release(),a();let d=(o||t).query(n.sql,n.parameters),c=await Promise.race([d,l]);if(!c)return Promise.allSettled([b(t,c),d]).finally(()=>o?.release()),a();o.release();let[P]=c;return[null,P]}catch(e){return o?.release(),[e]}finally{s&&r?.removeEventListener("abort",s)}}}}async function b(t,n){let i=f(n);try{await t.query(i.sql,i.parameters)}catch(r){console.error("Failed to cancel query:",r)}}export{E as createMySQL2Executor};
10
10
  //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vZGF0YS9teXNxbDIvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB0eXBlIHsgUG9vbCwgUG9vbENvbm5lY3Rpb24gfSBmcm9tIFwibXlzcWwyL3Byb21pc2VcIjtcblxuaW1wb3J0IHsgdHlwZSBFeGVjdXRvciwgZ2V0QWJvcnRSZXN1bHQgfSBmcm9tIFwiLi4vZXhlY3V0b3JcIjtcbmltcG9ydCB7IGdldENhbmNlbFF1ZXJ5IH0gZnJvbSBcIi4uL215c3FsLWNvcmUvdXRpbGl0eVwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTXlTUUwyRXhlY3V0b3IocG9vbDogUG9vbCk6IEV4ZWN1dG9yIHtcbiAgcmV0dXJuIHtcbiAgICBleGVjdXRlOiBhc3luYyAocXVlcnksIG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IHsgYWJvcnRTaWduYWwgfSA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgIGlmICghYWJvcnRTaWduYWwpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBbcmVzdWx0XSA9IGF3YWl0IHBvb2wucXVlcnkocXVlcnkuc3FsLCBxdWVyeS5wYXJhbWV0ZXJzKTtcblxuICAgICAgICAgIHJldHVybiBbbnVsbCwgcmVzdWx0IGFzIG5ldmVyXTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgICByZXR1cm4gW2Vycm9yIGFzIEVycm9yXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICByZXR1cm4gZ2V0QWJvcnRSZXN1bHQoKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGFib3J0TGlzdGVuZXI6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBjb25uZWN0aW9uOiBQb29sQ29ubmVjdGlvbiB8IHVuZGVmaW5lZDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IGFib3J0ZWQ6ICgpID0+IHZvaWQ7XG4gICAgICAgIGNvbnN0IGFib3J0aW9uUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiAoYWJvcnRlZCA9IHJlc29sdmUpKTtcblxuICAgICAgICBhYm9ydFNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKGFib3J0TGlzdGVuZXIgPSAoKSA9PiBhYm9ydGVkKCkpKTtcblxuICAgICAgICBjb25zdCBjb25uZWN0aW9uUHJvbWlzZSA9IHBvb2wuZ2V0Q29ubmVjdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb25SZXN1bHQgPSBhd2FpdCBQcm9taXNlLnJhY2UoW2Nvbm5lY3Rpb25Qcm9taXNlLCBhYm9ydGlvblByb21pc2VdKTtcblxuICAgICAgICBpZiAoIWNvbm5lY3Rpb25SZXN1bHQpIHtcbiAgICAgICAgICB2b2lkIGNvbm5lY3Rpb25Qcm9taXNlLmNhdGNoKCgpID0+IHt9KTtcblxuICAgICAgICAgIHJldHVybiBnZXRBYm9ydFJlc3VsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29ubmVjdGlvbiA9IGNvbm5lY3Rpb25SZXN1bHQ7XG5cbiAgICAgICAgaWYgKGFib3J0U2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICBjb25uZWN0aW9uLnJlbGVhc2UoKTtcblxuICAgICAgICAgIHJldHVybiBnZXRBYm9ydFJlc3VsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcXVlcnlQcm9taXNlID0gKGNvbm5lY3Rpb24gfHwgcG9vbCkucXVlcnkocXVlcnkuc3FsLCBxdWVyeS5wYXJhbWV0ZXJzKTtcblxuICAgICAgICBjb25zdCBxdWVyeVJlc3VsdCA9IGF3YWl0IFByb21pc2UucmFjZShbcXVlcnlQcm9taXNlLCBhYm9ydGlvblByb21pc2VdKTtcblxuICAgICAgICBpZiAoIXF1ZXJ5UmVzdWx0KSB7XG4gICAgICAgICAgLy8gbm90IGltcG9ydGFudCBlbm91Z2ggdG8gYXdhaXQuXG4gICAgICAgICAgdm9pZCBQcm9taXNlLmFsbFNldHRsZWQoW2NhbmNlbFF1ZXJ5KHBvb2wsIHF1ZXJ5UmVzdWx0KSwgcXVlcnlQcm9taXNlXSkuZmluYWxseSgoKSA9PiBjb25uZWN0aW9uPy5yZWxlYXNlKCkpO1xuXG4gICAgICAgICAgcmV0dXJuIGdldEFib3J0UmVzdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25uZWN0aW9uLnJlbGVhc2UoKTtcblxuICAgICAgICBjb25zdCBbcmVzdWx0XSA9IHF1ZXJ5UmVzdWx0O1xuXG4gICAgICAgIHJldHVybiBbbnVsbCwgcmVzdWx0IGFzIG5ldmVyXTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIGNvbm5lY3Rpb24/LnJlbGVhc2UoKTtcblxuICAgICAgICByZXR1cm4gW2Vycm9yIGFzIEVycm9yXTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChhYm9ydExpc3RlbmVyKSB7XG4gICAgICAgICAgYWJvcnRTaWduYWw/LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBhYm9ydExpc3RlbmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNhbmNlbFF1ZXJ5KHBvb2w6IFBvb2wsIHRocmVhZElkOiB1bmtub3duKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHF1ZXJ5ID0gZ2V0Q2FuY2VsUXVlcnkodGhyZWFkSWQpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgcG9vbC5xdWVyeShxdWVyeS5zcWwsIHF1ZXJ5LnBhcmFtZXRlcnMpO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gY2FuY2VsIHF1ZXJ5OlwiLCBlcnJvcik7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7O29JQUFBQSxJQUtPLFNBQVNDLEVBQXFCQyxFQUFzQixDQUN6RCxNQUFPLENBQ0wsUUFBUyxNQUFPQyxFQUFPQyxJQUFZLENBQ2pDLEdBQU0sQ0FBRSxZQUFBQyxDQUFZLEVBQUlELEdBQVcsQ0FBQyxFQUVwQyxHQUFJLENBQUNDLEVBQ0gsR0FBSSxDQUNGLEdBQU0sQ0FBQ0MsQ0FBTSxFQUFJLE1BQU1KLEVBQUssTUFBTUMsRUFBTSxJQUFLQSxFQUFNLFVBQVUsRUFFN0QsTUFBTyxDQUFDLEtBQU1HLENBQWUsQ0FDL0IsT0FBU0MsRUFBZ0IsQ0FDdkIsTUFBTyxDQUFDQSxDQUFjLENBQ3hCLENBR0YsR0FBSUYsRUFBWSxRQUNkLE9BQU9HLEVBQWUsRUFHeEIsSUFBSUMsRUFDQUMsRUFFSixHQUFJLENBQ0YsSUFBSUMsRUFDRUMsRUFBa0IsSUFBSSxRQUFlQyxHQUFhRixFQUFVRSxDQUFRLEVBRTFFUixFQUFZLGlCQUFpQixRQUFVSSxFQUFnQixJQUFNRSxFQUFRLENBQUUsRUFFdkUsSUFBTUcsRUFBb0JaLEVBQUssY0FBYyxFQUV2Q2EsRUFBbUIsTUFBTSxRQUFRLEtBQUssQ0FBQ0QsRUFBbUJGLENBQWUsQ0FBQyxFQUVoRixHQUFJLENBQUNHLEVBQ0gsT0FBS0QsRUFBa0IsTUFBTSxJQUFNLENBQUMsQ0FBQyxFQUU5Qk4sRUFBZSxFQUt4QixHQUZBRSxFQUFhSyxFQUVUVixFQUFZLFFBQ2QsT0FBQUssRUFBVyxRQUFRLEVBRVpGLEVBQWUsRUFHeEIsSUFBTVEsR0FBZ0JOLEdBQWNSLEdBQU0sTUFBTUMsRUFBTSxJQUFLQSxFQUFNLFVBQVUsRUFFckVjLEVBQWMsTUFBTSxRQUFRLEtBQUssQ0FBQ0QsRUFBY0osQ0FBZSxDQUFDLEVBRXRFLEdBQUksQ0FBQ0ssRUFFSCxPQUFLLFFBQVEsV0FBVyxDQUFDQyxFQUFZaEIsRUFBTWUsQ0FBVyxFQUFHRCxDQUFZLENBQUMsRUFBRSxRQUFRLElBQU1OLEdBQVksUUFBUSxDQUFDLEVBRXBHRixFQUFlLEVBR3hCRSxFQUFXLFFBQVEsRUFFbkIsR0FBTSxDQUFDSixDQUFNLEVBQUlXLEVBRWpCLE1BQU8sQ0FBQyxLQUFNWCxDQUFlLENBQy9CLE9BQVNDLEVBQWdCLENBQ3ZCLE9BQUFHLEdBQVksUUFBUSxFQUViLENBQUNILENBQWMsQ0FDeEIsUUFBRSxDQUNJRSxHQUNGSixHQUFhLG9CQUFvQixRQUFTSSxDQUFhLENBRTNELENBQ0YsQ0FDRixDQUNGLENBRUEsZUFBZVMsRUFBWWhCLEVBQVlpQixFQUFrQyxDQUN2RSxJQUFNaEIsRUFBUWlCLEVBQWVELENBQVEsRUFFckMsR0FBSSxDQUNGLE1BQU1qQixFQUFLLE1BQU1DLEVBQU0sSUFBS0EsRUFBTSxVQUFVLENBQzlDLE9BQVNJLEVBQWdCLENBQ3ZCLFFBQVEsTUFBTSwwQkFBMkJBLENBQUssQ0FDaEQsQ0FDRiIsCiAgIm5hbWVzIjogWyJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJjcmVhdGVNeVNRTDJFeGVjdXRvciIsICJwb29sIiwgInF1ZXJ5IiwgIm9wdGlvbnMiLCAiYWJvcnRTaWduYWwiLCAicmVzdWx0IiwgImVycm9yIiwgImdldEFib3J0UmVzdWx0IiwgImFib3J0TGlzdGVuZXIiLCAiY29ubmVjdGlvbiIsICJhYm9ydGVkIiwgImFib3J0aW9uUHJvbWlzZSIsICJyZXNvbHZlIiwgImNvbm5lY3Rpb25Qcm9taXNlIiwgImNvbm5lY3Rpb25SZXN1bHQiLCAicXVlcnlQcm9taXNlIiwgInF1ZXJ5UmVzdWx0IiwgImNhbmNlbFF1ZXJ5IiwgInRocmVhZElkIiwgImdldENhbmNlbFF1ZXJ5Il0KfQo=
@@ -1,5 +1,5 @@
1
1
  import { DatabaseSync } from 'node:sqlite';
2
- import { E as Executor } from '../../index-2horhMcs.cjs';
2
+ import { E as Executor } from '../../index-CV9DQF9a.cjs';
3
3
  import 'kysely';
4
4
 
5
5
  declare function createNodeSQLiteExecutor(database: DatabaseSync): Executor;
@@ -1,5 +1,5 @@
1
1
  import { DatabaseSync } from 'node:sqlite';
2
- import { E as Executor } from '../../index-2horhMcs.js';
2
+ import { E as Executor } from '../../index-CV9DQF9a.js';
3
3
  import 'kysely';
4
4
 
5
5
  declare function createNodeSQLiteExecutor(database: DatabaseSync): Executor;