@anyakichi/cdk-rsync-backup 0.1.2 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,5 +2,95 @@
2
2
 
3
3
  AWS CDK L3 construct for cloud backup system with rsync.
4
4
 
5
+ Create a full system backup of an on-premise server as EBS snapshots.
6
+ When you send files with rsync, the system will
7
+
8
+ - Create an EBS volume (from snapshot if exists)
9
+ - Attach and mount the volume to the EC2 instance
10
+ - Receive rsync data
11
+ - Unmount and detach the volume
12
+ - Create a EBS snapshot from the volume
13
+ - Delete the volume
14
+ - Upload log file into S3 bucket
15
+
16
+ ## Installation
17
+
18
+ ```
19
+ $ npm install @anyakichi/cdk-rsync-backup
20
+ ```
5
21
 
6
22
  ## Usage
23
+
24
+ ### Backup
25
+
26
+ ```typescript
27
+ import * as cdk from "aws-cdk-lib";
28
+ import { Construct } from "constructs";
29
+ import { RsyncBackup } from "@anyakichi/cdk-rsync-backup";
30
+
31
+ export class CdkDemoStack extends cdk.Stack {
32
+ constructor(scope: Construct, id: string, props?: cdk.StackProps) {
33
+ super(scope, id, props);
34
+
35
+ // Create `hostname` rsync module with 100 GiB EBS.
36
+ // SSH public key is required per module.
37
+ const rsyncBackup = new RsyncBackup(this, "RsyncBackup", {
38
+ modules: [
39
+ {
40
+ name: "hostname",
41
+ sshKey: "ssh-rsa AAAAB3Nza...",
42
+ size: 100,
43
+ },
44
+ ],
45
+ });
46
+ }
47
+ }
48
+ ```
49
+
50
+ If no EBS snapshot for `hostname` does not exist, a new EBS volume is
51
+ created on rsync execution with specified `size`.
52
+
53
+ If an EBS snapshot exist, a new EBS volume is created from the latest
54
+ EBS snapshot. The volume size is depends on the snapshot and `size`
55
+ parameter is ignored.
56
+
57
+ When you create a new backup, simply execute rsync.
58
+
59
+ ```
60
+ # rsync -azAXHS -e 'ssh -i id_rsa' --delete --numeric-ids \
61
+ --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"}
62
+ / root@ec2-XXX-XXX-XXX-XXX.compute-1.amazonaws.com::hostname/
63
+ ```
64
+
65
+ You can get the host SSH private key to login your instance from AWS
66
+ System Manager Parameter Sotre.
67
+
68
+ ```
69
+ $ aws ssm get-parameter \
70
+ --name /ec2/keypair/$(aws ec2 describe-key-pairs \
71
+ --key-names rsync-backup --query "KeyPairs[].KeyPairId" --output text) \
72
+ --with-decryption --query Parameter.Value --output text
73
+ ```
74
+
75
+ ### Restore
76
+
77
+ Create a new EC2 instance and attach a volume created from a required
78
+ snapshot, then copy the backup data.
79
+
80
+ Reading backup data from the backup instance is disabled by default.
81
+
82
+ ## Recommended workflow
83
+
84
+ Backup data transfer on Internet is not always reliable. Two-way backup
85
+ is recommended for reliability.
86
+
87
+ - Take a snapshot on local machine. rsnapshot with LVM snapshot is easy
88
+ and convenient. This should be finished in predictable time.
89
+
90
+ - Send a local backup to EC2 instance.
91
+
92
+ First level backups can be used for recovery from operation mistakes.
93
+ You can easily copy the files from local backups.
94
+
95
+ Second level backups are for disaster recovery. Its recovery cost is
96
+ relatively high.
package/lib/index.d.ts CHANGED
@@ -9,9 +9,10 @@ export interface RsyncBackupModule {
9
9
  export interface RsyncBackupProps {
10
10
  readonly modules?: RsyncBackupModule[];
11
11
  readonly instanceId?: string;
12
- readonly securityGroup?: ec2.ISecurityGroup;
13
- readonly vpc?: ec2.IVpc;
14
12
  readonly keyName?: string;
13
+ readonly vpc?: ec2.IVpc;
14
+ readonly securityGroup?: ec2.ISecurityGroup;
15
+ readonly instanceType?: ec2.InstanceType;
15
16
  readonly init?: ec2.CloudFormationInit;
16
17
  readonly logsBucket?: s3.IBucket;
17
18
  }
package/lib/index.js CHANGED
@@ -5,7 +5,6 @@ const cdk = require("aws-cdk-lib");
5
5
  const ec2 = require("aws-cdk-lib/aws-ec2");
6
6
  const iam = require("aws-cdk-lib/aws-iam");
7
7
  const s3 = require("aws-cdk-lib/aws-s3");
8
- const cdk_ec2_key_pair_1 = require("cdk-ec2-key-pair");
9
8
  const constructs_1 = require("constructs");
10
9
  const path = require("path");
11
10
  class RsyncBackup extends constructs_1.Construct {
@@ -27,7 +26,9 @@ class RsyncBackup extends constructs_1.Construct {
27
26
  });
28
27
  securityGroup.addIngressRule(ec2.Peer.anyIpv4(), ec2.Port.tcp(22), "Allow SSH Access");
29
28
  }
30
- const ami = new ec2.AmazonLinuxImage({
29
+ const instanceType = props.instanceType ||
30
+ ec2.InstanceType.of(ec2.InstanceClass.T4G, ec2.InstanceSize.NANO);
31
+ const machineImage = new ec2.AmazonLinuxImage({
31
32
  generation: ec2.AmazonLinuxGeneration.AMAZON_LINUX_2,
32
33
  cpuType: ec2.AmazonLinuxCpuType.ARM_64,
33
34
  });
@@ -60,17 +61,10 @@ class RsyncBackup extends constructs_1.Construct {
60
61
  rsyncBackup: policy,
61
62
  },
62
63
  });
63
- let keyName;
64
- let key;
65
- if (props.keyName) {
66
- keyName = props.keyName;
67
- }
68
- else {
69
- key = new cdk_ec2_key_pair_1.KeyPair(this, "KeyPair", {
70
- name: "rsync-backup",
71
- });
72
- keyName = key.keyPairName;
73
- }
64
+ const keyPair = new ec2.CfnKeyPair(this, "KeyPair", {
65
+ keyName: "rsync-backup",
66
+ });
67
+ keyPair.applyRemovalPolicy(cdk.RemovalPolicy.DESTROY);
74
68
  const initConfig = new ec2.InitConfig([
75
69
  ec2.InitFile.fromString("/etc/environment", `S3_LOGS_BUCKET=${bucket.bucketName}`),
76
70
  ec2.InitFile.fromAsset("/usr/local/bin/rsync-backup", path.join(__dirname, "../assets/rsync-backup.sh"), {
@@ -118,16 +112,16 @@ class RsyncBackup extends constructs_1.Construct {
118
112
  return ec2.CloudFormationInit.fromConfig(initConfig);
119
113
  }
120
114
  })();
121
- const instance = new ec2.Instance(this, props.instanceId || "RsyncBackup", {
115
+ const instance = new ec2.Instance(this, props.instanceId || "Instance", {
116
+ keyName: cdk.Token.asString(keyPair.ref),
122
117
  vpc,
123
- instanceType: ec2.InstanceType.of(ec2.InstanceClass.T4G, ec2.InstanceSize.NANO),
124
- machineImage: ami,
125
- securityGroup: securityGroup,
126
- keyName: keyName,
127
- role: role,
128
- init: init,
118
+ securityGroup,
119
+ instanceType,
120
+ machineImage,
121
+ role,
122
+ init,
129
123
  });
130
124
  }
131
125
  }
132
126
  exports.RsyncBackup = RsyncBackup;
133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFDbkMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyx5Q0FBeUM7QUFDekMsdURBQTJDO0FBQzNDLDJDQUF1QztBQUN2Qyw2QkFBNkI7QUFxQjdCLE1BQWEsV0FBWSxTQUFRLHNCQUFTO0lBQ3hDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsUUFBMEIsRUFBRTtRQUNwRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sTUFBTSxHQUNWLEtBQUssQ0FBQyxVQUFVO1lBQ2hCLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO2dCQUNoQyxhQUFhLEVBQUUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxPQUFPO2FBQ3pDLENBQUMsQ0FBQztRQUVMLE1BQU0sR0FBRyxHQUNQLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUU1RSxJQUFJLGFBQWlDLENBQUM7UUFDdEMsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO1NBQ3JDO2FBQU07WUFDTCxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUU7Z0JBQzNELEdBQUc7Z0JBQ0gsZ0JBQWdCLEVBQUUsSUFBSTthQUN2QixDQUFDLENBQUM7WUFFSCxhQUFhLENBQUMsY0FBYyxDQUMxQixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUNsQixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFDaEIsa0JB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QUFLLENBQUMsSUFBSSxFQUFFO2dCQUNkLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDaEQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDO2FBQ25CO2lCQUFNO2dCQUNMLE9BQU8sR0FBRyxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUN0RDtRQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFTCxNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxVQUFVLElBQUksYUFBYSxFQUFFO1lBQ3pFLEdBQUc7WUFDSCxZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQy9CLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUNyQixHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDdEI7WUFDRCxZQUFZLEVBQUUsR0FBRztZQUNqQixhQUFhLEVBQUUsYUFBYTtZQUM1QixPQUFPLEVBQUUsT0FBTztZQUNoQixJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBektELGtDQXlLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgKiBhcyBzMyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSBcImNkay1lYzIta2V5LXBhaXJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnN5bmNCYWNrdXBNb2R1bGUge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNzaEtleTogc3RyaW5nO1xuICByZWFkb25seSBzaXplOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnN5bmNCYWNrdXBQcm9wcyB7XG4gIHJlYWRvbmx5IG1vZHVsZXM/OiBSc3luY0JhY2t1cE1vZHVsZVtdO1xuXG4gIHJlYWRvbmx5IGluc3RhbmNlSWQ/OiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkgc2VjdXJpdHlHcm91cD86IGVjMi5JU2VjdXJpdHlHcm91cDtcbiAgcmVhZG9ubHkgdnBjPzogZWMyLklWcGM7XG4gIHJlYWRvbmx5IGtleU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGluaXQ/OiBlYzIuQ2xvdWRGb3JtYXRpb25Jbml0O1xuXG4gIHJlYWRvbmx5IGxvZ3NCdWNrZXQ/OiBzMy5JQnVja2V0O1xufVxuXG5leHBvcnQgY2xhc3MgUnN5bmNCYWNrdXAgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUnN5bmNCYWNrdXBQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGJ1Y2tldCA9XG4gICAgICBwcm9wcy5sb2dzQnVja2V0IHx8XG4gICAgICBuZXcgczMuQnVja2V0KHRoaXMsIFwiTG9nc0J1Y2tldFwiLCB7XG4gICAgICAgIHJlbW92YWxQb2xpY3k6IGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICB9KTtcblxuICAgIGNvbnN0IHZwYyA9XG4gICAgICBwcm9wcy52cGMgfHwgY2RrLmF3c19lYzIuVnBjLmZyb21Mb29rdXAodGhpcywgXCJWUENcIiwgeyBpc0RlZmF1bHQ6IHRydWUgfSk7XG5cbiAgICBsZXQgc2VjdXJpdHlHcm91cDogZWMyLklTZWN1cml0eUdyb3VwO1xuICAgIGlmIChwcm9wcy5zZWN1cml0eUdyb3VwKSB7XG4gICAgICBzZWN1cml0eUdyb3VwID0gcHJvcHMuc2VjdXJpdHlHcm91cDtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VjdXJpdHlHcm91cCA9IG5ldyBlYzIuU2VjdXJpdHlHcm91cCh0aGlzLCBcIlNlY3VyaXR5R3JvdXBcIiwge1xuICAgICAgICB2cGMsXG4gICAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgc2VjdXJpdHlHcm91cC5hZGRJbmdyZXNzUnVsZShcbiAgICAgICAgZWMyLlBlZXIuYW55SXB2NCgpLFxuICAgICAgICBlYzIuUG9ydC50Y3AoMjIpLFxuICAgICAgICBcIkFsbG93IFNTSCBBY2Nlc3NcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBhbWkgPSBuZXcgZWMyLkFtYXpvbkxpbnV4SW1hZ2Uoe1xuICAgICAgZ2VuZXJhdGlvbjogZWMyLkFtYXpvbkxpbnV4R2VuZXJhdGlvbi5BTUFaT05fTElOVVhfMixcbiAgICAgIGNwdVR5cGU6IGVjMi5BbWF6b25MaW51eENwdVR5cGUuQVJNXzY0LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcG9saWN5ID0gbmV3IGlhbS5Qb2xpY3lEb2N1bWVudCh7XG4gICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICBcImVjMjpEZXNjcmliZUluc3RhbmNlc1wiLFxuICAgICAgICAgICAgXCJlYzI6RGVzY3JpYmVTbmFwc2hvdHNcIixcbiAgICAgICAgICAgIFwiZWMyOkRlc2NyaWJlVm9sdW1lc1wiLFxuICAgICAgICAgICAgXCJlYzI6RGVzY3JpYmVWb2x1bWVTdGF0dXNcIixcbiAgICAgICAgICAgIFwiZWMyOkF0dGFjaFZvbHVtZVwiLFxuICAgICAgICAgICAgXCJlYzI6RGV0YWNoVm9sdW1lXCIsXG4gICAgICAgICAgICBcImVjMjpDcmVhdGVWb2x1bWVcIixcbiAgICAgICAgICAgIFwiZWMyOkRlbGV0ZVZvbHVtZVwiLFxuICAgICAgICAgICAgXCJlYzI6Q3JlYXRlU25hcHNob3RcIixcbiAgICAgICAgICAgIFwiZWMyOkNyZWF0ZVRhZ3NcIixcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbXCJzMzpQdXRPYmplY3RcIiwgXCJzMzpQdXRPYmplY3RBY2xcIl0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbYnVja2V0LmJ1Y2tldEFybiwgYnVja2V0LmJ1Y2tldEFybiArIFwiLypcIl0sXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgXCJJbnN0YW5jZVJvbGVcIiwge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJlYzIuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgIHJzeW5jQmFja3VwOiBwb2xpY3ksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgbGV0IGtleU5hbWU6IHN0cmluZztcbiAgICBsZXQga2V5OiBLZXlQYWlyIHwgdW5kZWZpbmVkO1xuICAgIGlmIChwcm9wcy5rZXlOYW1lKSB7XG4gICAgICBrZXlOYW1lID0gcHJvcHMua2V5TmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAga2V5ID0gbmV3IEtleVBhaXIodGhpcywgXCJLZXlQYWlyXCIsIHtcbiAgICAgICAgbmFtZTogXCJyc3luYy1iYWNrdXBcIixcbiAgICAgIH0pO1xuICAgICAga2V5TmFtZSA9IGtleS5rZXlQYWlyTmFtZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbml0Q29uZmlnID0gbmV3IGVjMi5Jbml0Q29uZmlnKFtcbiAgICAgIGVjMi5Jbml0RmlsZS5mcm9tU3RyaW5nKFxuICAgICAgICBcIi9ldGMvZW52aXJvbm1lbnRcIixcbiAgICAgICAgYFMzX0xPR1NfQlVDS0VUPSR7YnVja2V0LmJ1Y2tldE5hbWV9YFxuICAgICAgKSxcbiAgICAgIGVjMi5Jbml0RmlsZS5mcm9tQXNzZXQoXG4gICAgICAgIFwiL3Vzci9sb2NhbC9iaW4vcnN5bmMtYmFja3VwXCIsXG4gICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi4vYXNzZXRzL3JzeW5jLWJhY2t1cC5zaFwiKSxcbiAgICAgICAge1xuICAgICAgICAgIG1vZGU6IFwiMDAwNzU1XCIsXG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICBlYzIuSW5pdEZpbGUuZnJvbUFzc2V0KFxuICAgICAgICBcIi9zcnYvcnN5bmMtYmFja3VwL3JzeW5jZC5pbmNcIixcbiAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLi9hc3NldHMvcnN5bmNkLmluY1wiKVxuICAgICAgKSxcbiAgICBdKTtcblxuICAgIGlmIChwcm9wcy5tb2R1bGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtpLCBtXSBvZiBwcm9wcy5tb2R1bGVzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAobS5zaXplIDwgMCB8fCAhTnVtYmVyLmlzSW50ZWdlcihtLnNpemUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibW9kdWxlIHNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXJcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZXZpY2UgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFwiYlwiLmNoYXJDb2RlQXQoMCkgKyBpKTtcblxuICAgICAgICBpbml0Q29uZmlnLmFkZChcbiAgICAgICAgICBlYzIuSW5pdEZpbGUuZnJvbUFzc2V0KFxuICAgICAgICAgICAgYC9zcnYvcnN5bmMtYmFja3VwL3JzeW5jZC4ke20ubmFtZX0uY29uZmAsXG4gICAgICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uL2Fzc2V0cy9yc3luY2QuY29uZlwiKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgaW5pdENvbmZpZy5hZGQoXG4gICAgICAgICAgZWMyLkluaXRDb21tYW5kLmFyZ3ZDb21tYW5kKFtcbiAgICAgICAgICAgIFwiL3Vzci9iaW4vc2VkXCIsXG4gICAgICAgICAgICBcIi1pXCIsXG4gICAgICAgICAgICBgcy9AaG9zdEAvJHttLm5hbWV9L2dgLFxuICAgICAgICAgICAgYC9zcnYvcnN5bmMtYmFja3VwL3JzeW5jZC4ke20ubmFtZX0uY29uZmAsXG4gICAgICAgICAgXSlcbiAgICAgICAgKTtcbiAgICAgICAgaW5pdENvbmZpZy5hZGQoXG4gICAgICAgICAgZWMyLkluaXRDb21tYW5kLnNoZWxsQ29tbWFuZChcbiAgICAgICAgICAgIGBlY2hvICduby1wb3J0LWZvcndhcmRpbmcsbm8tYWdlbnQtZm9yd2FyZGluZyxuby1YMTEtZm9yd2FyZGluZyxjb21tYW5kPVwicnN5bmMtYmFja3VwICR7bS5uYW1lfSAke20uc2l6ZX0gL2Rldi9zZCR7ZGV2aWNlfVwiICR7bS5zc2hLZXl9JyA+PiAvcm9vdC8uc3NoL2F1dGhvcml6ZWRfa2V5c2BcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGluaXRDb25maWcuYWRkKFxuICAgICAgICBlYzIuSW5pdEZpbGUuZnJvbUFzc2V0KFxuICAgICAgICAgIFwiL3Nydi9yc3luYy1iYWNrdXAvcnN5bmNkLmJhY2t1cC5jb25mXCIsXG4gICAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLi9hc3NldHMvcnN5bmNkLmNvbmZcIilcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIGluaXRDb25maWcuYWRkKFxuICAgICAgICBlYzIuSW5pdENvbW1hbmQuYXJndkNvbW1hbmQoW1xuICAgICAgICAgIFwiL3Vzci9iaW4vc2VkXCIsXG4gICAgICAgICAgXCItaVwiLFxuICAgICAgICAgIGBzL0Bob3N0QC9iYWNrdXAvZ2AsXG4gICAgICAgICAgYC9zcnYvcnN5bmMtYmFja3VwL3JzeW5jZC5iYWNrdXAuY29uZmAsXG4gICAgICAgIF0pXG4gICAgICApO1xuICAgICAgaW5pdENvbmZpZy5hZGQoXG4gICAgICAgIGVjMi5Jbml0Q29tbWFuZC5hcmd2Q29tbWFuZChbXG4gICAgICAgICAgXCIvdXNyL2Jpbi9zZWRcIixcbiAgICAgICAgICBcIi1pXCIsXG4gICAgICAgICAgJ3N8Y29tbWFuZD1cIi4qXCIgfGNvbW1hbmQ9XCJyc3luYy1iYWNrdXAgYmFja3VwIDEwMCAvZGV2L3NkYlwiIHwnLFxuICAgICAgICAgIFwiL3Jvb3QvLnNzaC9hdXRob3JpemVkX2tleXNcIixcbiAgICAgICAgXSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5pdCA9ICgoKSA9PiB7XG4gICAgICBpZiAocHJvcHMuaW5pdCkge1xuICAgICAgICBwcm9wcy5pbml0LmFkZENvbmZpZyhcInJzeW5jQmFja3VwXCIsIGluaXRDb25maWcpO1xuICAgICAgICByZXR1cm4gcHJvcHMuaW5pdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBlYzIuQ2xvdWRGb3JtYXRpb25Jbml0LmZyb21Db25maWcoaW5pdENvbmZpZyk7XG4gICAgICB9XG4gICAgfSkoKTtcblxuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IGVjMi5JbnN0YW5jZSh0aGlzLCBwcm9wcy5pbnN0YW5jZUlkIHx8IFwiUnN5bmNCYWNrdXBcIiwge1xuICAgICAgdnBjLFxuICAgICAgaW5zdGFuY2VUeXBlOiBlYzIuSW5zdGFuY2VUeXBlLm9mKFxuICAgICAgICBlYzIuSW5zdGFuY2VDbGFzcy5UNEcsXG4gICAgICAgIGVjMi5JbnN0YW5jZVNpemUuTkFOT1xuICAgICAgKSxcbiAgICAgIG1hY2hpbmVJbWFnZTogYW1pLFxuICAgICAgc2VjdXJpdHlHcm91cDogc2VjdXJpdHlHcm91cCxcbiAgICAgIGtleU5hbWU6IGtleU5hbWUsXG4gICAgICByb2xlOiByb2xlLFxuICAgICAgaW5pdDogaW5pdCxcbiAgICB9KTtcbiAgfVxufVxuIl19
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBbUM7QUFDbkMsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyx5Q0FBeUM7QUFDekMsMkNBQXVDO0FBQ3ZDLDZCQUE2QjtBQXNCN0IsTUFBYSxXQUFZLFNBQVEsc0JBQVM7SUFDeEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxRQUEwQixFQUFFO1FBQ3BFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxNQUFNLEdBQ1YsS0FBSyxDQUFDLFVBQVU7WUFDaEIsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7Z0JBQ2hDLGFBQWEsRUFBRSxHQUFHLENBQUMsYUFBYSxDQUFDLE9BQU87YUFDekMsQ0FBQyxDQUFDO1FBRUwsTUFBTSxHQUFHLEdBQ1AsS0FBSyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTVFLElBQUksYUFBaUMsQ0FBQztRQUN0QyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFDdkIsYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7U0FDckM7YUFBTTtZQUNMLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRTtnQkFDM0QsR0FBRztnQkFDSCxnQkFBZ0IsRUFBRSxJQUFJO2FBQ3ZCLENBQUMsQ0FBQztZQUVILGFBQWEsQ0FBQyxjQUFjLENBQzFCLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQ2xCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUNoQixrQkFBa0IsQ0FDbkIsQ0FB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QU0sSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ2pCLElBQUksS0FBSyxDQUFDLElBQUksRUFBRTtnQkFDZCxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQ2hELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQzthQUNuQjtpQkFBTTtnQkFDTCxPQUFPLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDdEQ7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRUwsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsVUFBVSxJQUFJLFVBQVUsRUFBRTtZQUN0RSxPQUFPLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUN4QyxHQUFHO1lBQ0gsYUFBYTtZQUNiLFlBQVk7WUFDWixZQUFZO1lBQ1osSUFBSTtZQUNKLElBQUk7U0FDTCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFwS0Qsa0NBb0tDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCAqIGFzIHMzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnN5bmNCYWNrdXBNb2R1bGUge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNzaEtleTogc3RyaW5nO1xuICByZWFkb25seSBzaXplOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnN5bmNCYWNrdXBQcm9wcyB7XG4gIHJlYWRvbmx5IG1vZHVsZXM/OiBSc3luY0JhY2t1cE1vZHVsZVtdO1xuXG4gIHJlYWRvbmx5IGluc3RhbmNlSWQ/OiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkga2V5TmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgdnBjPzogZWMyLklWcGM7XG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXA/OiBlYzIuSVNlY3VyaXR5R3JvdXA7XG4gIHJlYWRvbmx5IGluc3RhbmNlVHlwZT86IGVjMi5JbnN0YW5jZVR5cGU7XG4gIHJlYWRvbmx5IGluaXQ/OiBlYzIuQ2xvdWRGb3JtYXRpb25Jbml0O1xuXG4gIHJlYWRvbmx5IGxvZ3NCdWNrZXQ/OiBzMy5JQnVja2V0O1xufVxuXG5leHBvcnQgY2xhc3MgUnN5bmNCYWNrdXAgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUnN5bmNCYWNrdXBQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGJ1Y2tldCA9XG4gICAgICBwcm9wcy5sb2dzQnVja2V0IHx8XG4gICAgICBuZXcgczMuQnVja2V0KHRoaXMsIFwiTG9nc0J1Y2tldFwiLCB7XG4gICAgICAgIHJlbW92YWxQb2xpY3k6IGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICB9KTtcblxuICAgIGNvbnN0IHZwYyA9XG4gICAgICBwcm9wcy52cGMgfHwgY2RrLmF3c19lYzIuVnBjLmZyb21Mb29rdXAodGhpcywgXCJWUENcIiwgeyBpc0RlZmF1bHQ6IHRydWUgfSk7XG5cbiAgICBsZXQgc2VjdXJpdHlHcm91cDogZWMyLklTZWN1cml0eUdyb3VwO1xuICAgIGlmIChwcm9wcy5zZWN1cml0eUdyb3VwKSB7XG4gICAgICBzZWN1cml0eUdyb3VwID0gcHJvcHMuc2VjdXJpdHlHcm91cDtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VjdXJpdHlHcm91cCA9IG5ldyBlYzIuU2VjdXJpdHlHcm91cCh0aGlzLCBcIlNlY3VyaXR5R3JvdXBcIiwge1xuICAgICAgICB2cGMsXG4gICAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgc2VjdXJpdHlHcm91cC5hZGRJbmdyZXNzUnVsZShcbiAgICAgICAgZWMyLlBlZXIuYW55SXB2NCgpLFxuICAgICAgICBlYzIuUG9ydC50Y3AoMjIpLFxuICAgICAgICBcIkFsbG93IFNTSCBBY2Nlc3NcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnN0YW5jZVR5cGUgPVxuICAgICAgcHJvcHMuaW5zdGFuY2VUeXBlIHx8XG4gICAgICBlYzIuSW5zdGFuY2VUeXBlLm9mKGVjMi5JbnN0YW5jZUNsYXNzLlQ0RywgZWMyLkluc3RhbmNlU2l6ZS5OQU5PKTtcblxuICAgIGNvbnN0IG1hY2hpbmVJbWFnZSA9IG5ldyBlYzIuQW1hem9uTGludXhJbWFnZSh7XG4gICAgICBnZW5lcmF0aW9uOiBlYzIuQW1hem9uTGludXhHZW5lcmF0aW9uLkFNQVpPTl9MSU5VWF8yLFxuICAgICAgY3B1VHlwZTogZWMyLkFtYXpvbkxpbnV4Q3B1VHlwZS5BUk1fNjQsXG4gICAgfSk7XG5cbiAgICBjb25zdCBwb2xpY3kgPSBuZXcgaWFtLlBvbGljeURvY3VtZW50KHtcbiAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgIFwiZWMyOkRlc2NyaWJlSW5zdGFuY2VzXCIsXG4gICAgICAgICAgICBcImVjMjpEZXNjcmliZVNuYXBzaG90c1wiLFxuICAgICAgICAgICAgXCJlYzI6RGVzY3JpYmVWb2x1bWVzXCIsXG4gICAgICAgICAgICBcImVjMjpEZXNjcmliZVZvbHVtZVN0YXR1c1wiLFxuICAgICAgICAgICAgXCJlYzI6QXR0YWNoVm9sdW1lXCIsXG4gICAgICAgICAgICBcImVjMjpEZXRhY2hWb2x1bWVcIixcbiAgICAgICAgICAgIFwiZWMyOkNyZWF0ZVZvbHVtZVwiLFxuICAgICAgICAgICAgXCJlYzI6RGVsZXRlVm9sdW1lXCIsXG4gICAgICAgICAgICBcImVjMjpDcmVhdGVTbmFwc2hvdFwiLFxuICAgICAgICAgICAgXCJlYzI6Q3JlYXRlVGFnc1wiLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFtcInMzOlB1dE9iamVjdFwiLCBcInMzOlB1dE9iamVjdEFjbFwiXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtidWNrZXQuYnVja2V0QXJuLCBidWNrZXQuYnVja2V0QXJuICsgXCIvKlwiXSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgcm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCBcIkluc3RhbmNlUm9sZVwiLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbChcImVjMi5hbWF6b25hd3MuY29tXCIpLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgcnN5bmNCYWNrdXA6IHBvbGljeSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBrZXlQYWlyID0gbmV3IGVjMi5DZm5LZXlQYWlyKHRoaXMsIFwiS2V5UGFpclwiLCB7XG4gICAgICBrZXlOYW1lOiBcInJzeW5jLWJhY2t1cFwiLFxuICAgIH0pO1xuICAgIGtleVBhaXIuYXBwbHlSZW1vdmFsUG9saWN5KGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1kpO1xuXG4gICAgY29uc3QgaW5pdENvbmZpZyA9IG5ldyBlYzIuSW5pdENvbmZpZyhbXG4gICAgICBlYzIuSW5pdEZpbGUuZnJvbVN0cmluZyhcbiAgICAgICAgXCIvZXRjL2Vudmlyb25tZW50XCIsXG4gICAgICAgIGBTM19MT0dTX0JVQ0tFVD0ke2J1Y2tldC5idWNrZXROYW1lfWBcbiAgICAgICksXG4gICAgICBlYzIuSW5pdEZpbGUuZnJvbUFzc2V0KFxuICAgICAgICBcIi91c3IvbG9jYWwvYmluL3JzeW5jLWJhY2t1cFwiLFxuICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uL2Fzc2V0cy9yc3luYy1iYWNrdXAuc2hcIiksXG4gICAgICAgIHtcbiAgICAgICAgICBtb2RlOiBcIjAwMDc1NVwiLFxuICAgICAgICB9XG4gICAgICApLFxuICAgICAgZWMyLkluaXRGaWxlLmZyb21Bc3NldChcbiAgICAgICAgXCIvc3J2L3JzeW5jLWJhY2t1cC9yc3luY2QuaW5jXCIsXG4gICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi4vYXNzZXRzL3JzeW5jZC5pbmNcIilcbiAgICAgICksXG4gICAgXSk7XG5cbiAgICBpZiAocHJvcHMubW9kdWxlcykge1xuICAgICAgZm9yIChjb25zdCBbaSwgbV0gb2YgcHJvcHMubW9kdWxlcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKG0uc2l6ZSA8IDAgfHwgIU51bWJlci5pc0ludGVnZXIobS5zaXplKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm1vZHVsZSBzaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGV2aWNlID0gU3RyaW5nLmZyb21DaGFyQ29kZShcImJcIi5jaGFyQ29kZUF0KDApICsgaSk7XG5cbiAgICAgICAgaW5pdENvbmZpZy5hZGQoXG4gICAgICAgICAgZWMyLkluaXRGaWxlLmZyb21Bc3NldChcbiAgICAgICAgICAgIGAvc3J2L3JzeW5jLWJhY2t1cC9yc3luY2QuJHttLm5hbWV9LmNvbmZgLFxuICAgICAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLi9hc3NldHMvcnN5bmNkLmNvbmZcIilcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGluaXRDb25maWcuYWRkKFxuICAgICAgICAgIGVjMi5Jbml0Q29tbWFuZC5hcmd2Q29tbWFuZChbXG4gICAgICAgICAgICBcIi91c3IvYmluL3NlZFwiLFxuICAgICAgICAgICAgXCItaVwiLFxuICAgICAgICAgICAgYHMvQGhvc3RALyR7bS5uYW1lfS9nYCxcbiAgICAgICAgICAgIGAvc3J2L3JzeW5jLWJhY2t1cC9yc3luY2QuJHttLm5hbWV9LmNvbmZgLFxuICAgICAgICAgIF0pXG4gICAgICAgICk7XG4gICAgICAgIGluaXRDb25maWcuYWRkKFxuICAgICAgICAgIGVjMi5Jbml0Q29tbWFuZC5zaGVsbENvbW1hbmQoXG4gICAgICAgICAgICBgZWNobyAnbm8tcG9ydC1mb3J3YXJkaW5nLG5vLWFnZW50LWZvcndhcmRpbmcsbm8tWDExLWZvcndhcmRpbmcsY29tbWFuZD1cInJzeW5jLWJhY2t1cCAke20ubmFtZX0gJHttLnNpemV9IC9kZXYvc2Qke2RldmljZX1cIiAke20uc3NoS2V5fScgPj4gL3Jvb3QvLnNzaC9hdXRob3JpemVkX2tleXNgXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpbml0Q29uZmlnLmFkZChcbiAgICAgICAgZWMyLkluaXRGaWxlLmZyb21Bc3NldChcbiAgICAgICAgICBcIi9zcnYvcnN5bmMtYmFja3VwL3JzeW5jZC5iYWNrdXAuY29uZlwiLFxuICAgICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi4vYXNzZXRzL3JzeW5jZC5jb25mXCIpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBpbml0Q29uZmlnLmFkZChcbiAgICAgICAgZWMyLkluaXRDb21tYW5kLmFyZ3ZDb21tYW5kKFtcbiAgICAgICAgICBcIi91c3IvYmluL3NlZFwiLFxuICAgICAgICAgIFwiLWlcIixcbiAgICAgICAgICBgcy9AaG9zdEAvYmFja3VwL2dgLFxuICAgICAgICAgIGAvc3J2L3JzeW5jLWJhY2t1cC9yc3luY2QuYmFja3VwLmNvbmZgLFxuICAgICAgICBdKVxuICAgICAgKTtcbiAgICAgIGluaXRDb25maWcuYWRkKFxuICAgICAgICBlYzIuSW5pdENvbW1hbmQuYXJndkNvbW1hbmQoW1xuICAgICAgICAgIFwiL3Vzci9iaW4vc2VkXCIsXG4gICAgICAgICAgXCItaVwiLFxuICAgICAgICAgICdzfGNvbW1hbmQ9XCIuKlwiIHxjb21tYW5kPVwicnN5bmMtYmFja3VwIGJhY2t1cCAxMDAgL2Rldi9zZGJcIiB8JyxcbiAgICAgICAgICBcIi9yb290Ly5zc2gvYXV0aG9yaXplZF9rZXlzXCIsXG4gICAgICAgIF0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGluaXQgPSAoKCkgPT4ge1xuICAgICAgaWYgKHByb3BzLmluaXQpIHtcbiAgICAgICAgcHJvcHMuaW5pdC5hZGRDb25maWcoXCJyc3luY0JhY2t1cFwiLCBpbml0Q29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHByb3BzLmluaXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZWMyLkNsb3VkRm9ybWF0aW9uSW5pdC5mcm9tQ29uZmlnKGluaXRDb25maWcpO1xuICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBlYzIuSW5zdGFuY2UodGhpcywgcHJvcHMuaW5zdGFuY2VJZCB8fCBcIkluc3RhbmNlXCIsIHtcbiAgICAgIGtleU5hbWU6IGNkay5Ub2tlbi5hc1N0cmluZyhrZXlQYWlyLnJlZiksXG4gICAgICB2cGMsXG4gICAgICBzZWN1cml0eUdyb3VwLFxuICAgICAgaW5zdGFuY2VUeXBlLFxuICAgICAgbWFjaGluZUltYWdlLFxuICAgICAgcm9sZSxcbiAgICAgIGluaXQsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@anyakichi/cdk-rsync-backup",
3
3
  "description": "AWS CDK L3 construct for cloud backup system with rsync",
4
- "version": "0.1.2",
4
+ "version": "0.2.1",
5
5
  "author": "INAJIMA Daisuke <inajima@gmail.com>",
6
6
  "scripts": {
7
7
  "build": "tsc",
@@ -11,9 +11,6 @@
11
11
  },
12
12
  "types": "lib/index.d.ts",
13
13
  "main": "lib/index.js",
14
- "dependencies": {
15
- "cdk-ec2-key-pair": "^3.3.1"
16
- },
17
14
  "peerDependencies": {
18
15
  "aws-cdk-lib": "^2.0.0",
19
16
  "constructs": "^10.0.0"