@aws-sdk/lib-dynamodb 3.32.0 → 3.36.0
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/CHANGELOG.md +41 -0
- package/dist-cjs/DynamoDBDocument.js +205 -0
- package/dist-cjs/DynamoDBDocumentClient.js +18 -0
- package/dist-cjs/commands/BatchExecuteStatementCommand.js +27 -0
- package/dist-cjs/commands/BatchGetCommand.js +42 -0
- package/dist-cjs/commands/BatchWriteCommand.js +53 -0
- package/dist-cjs/commands/DeleteCommand.js +39 -0
- package/dist-cjs/commands/ExecuteStatementCommand.js +27 -0
- package/dist-cjs/commands/ExecuteTransactionCommand.js +27 -0
- package/dist-cjs/commands/GetCommand.js +27 -0
- package/dist-cjs/commands/PutCommand.js +39 -0
- package/dist-cjs/commands/QueryCommand.js +42 -0
- package/dist-cjs/commands/ScanCommand.js +36 -0
- package/dist-cjs/commands/TransactGetCommand.js +27 -0
- package/dist-cjs/commands/TransactWriteCommand.js +44 -0
- package/dist-cjs/commands/UpdateCommand.js +45 -0
- package/dist-cjs/commands/utils.js +44 -0
- package/dist-cjs/index.js +18 -0
- package/dist-es/DynamoDBDocument.js +208 -0
- package/dist-es/DynamoDBDocumentClient.js +19 -0
- package/dist-es/commands/BatchExecuteStatementCommand.js +33 -0
- package/dist-es/commands/BatchGetCommand.js +48 -0
- package/dist-es/commands/BatchWriteCommand.js +59 -0
- package/dist-es/commands/DeleteCommand.js +45 -0
- package/dist-es/commands/ExecuteStatementCommand.js +33 -0
- package/dist-es/commands/ExecuteTransactionCommand.js +33 -0
- package/dist-es/commands/GetCommand.js +33 -0
- package/dist-es/commands/PutCommand.js +45 -0
- package/dist-es/commands/QueryCommand.js +48 -0
- package/dist-es/commands/ScanCommand.js +42 -0
- package/dist-es/commands/TransactGetCommand.js +33 -0
- package/dist-es/commands/TransactWriteCommand.js +50 -0
- package/dist-es/commands/UpdateCommand.js +51 -0
- package/dist-es/commands/utils.js +46 -0
- package/{dist/types/index.d.ts → dist-es/index.js} +0 -0
- package/{dist/types → dist-types}/DynamoDBDocument.d.ts +3 -3
- package/{dist/types → dist-types}/DynamoDBDocumentClient.d.ts +4 -4
- package/{dist/types → dist-types}/commands/BatchExecuteStatementCommand.d.ts +3 -3
- package/{dist/types → dist-types}/commands/BatchGetCommand.d.ts +3 -3
- package/{dist/types → dist-types}/commands/BatchWriteCommand.d.ts +3 -3
- package/{dist/types → dist-types}/commands/DeleteCommand.d.ts +3 -3
- package/{dist/types → dist-types}/commands/ExecuteStatementCommand.d.ts +2 -2
- package/{dist/types → dist-types}/commands/ExecuteTransactionCommand.d.ts +3 -3
- package/{dist/types → dist-types}/commands/GetCommand.d.ts +2 -2
- package/{dist/types → dist-types}/commands/PutCommand.d.ts +2 -2
- package/{dist/types → dist-types}/commands/QueryCommand.d.ts +2 -2
- package/{dist/types → dist-types}/commands/ScanCommand.d.ts +2 -2
- package/{dist/types → dist-types}/commands/TransactGetCommand.d.ts +2 -2
- package/{dist/types → dist-types}/commands/TransactWriteCommand.d.ts +3 -3
- package/{dist/types → dist-types}/commands/UpdateCommand.d.ts +2 -2
- package/{dist/types → dist-types}/commands/utils.d.ts +0 -0
- package/dist-types/index.d.ts +15 -0
- package/{dist/types → dist-types}/ts3.4/DynamoDBDocument.d.ts +3 -3
- package/{dist/types → dist-types}/ts3.4/DynamoDBDocumentClient.d.ts +4 -4
- package/{dist/types → dist-types}/ts3.4/commands/BatchExecuteStatementCommand.d.ts +3 -3
- package/{dist/types → dist-types}/ts3.4/commands/BatchGetCommand.d.ts +3 -3
- package/{dist/types → dist-types}/ts3.4/commands/BatchWriteCommand.d.ts +3 -3
- package/{dist/types → dist-types}/ts3.4/commands/DeleteCommand.d.ts +3 -3
- package/{dist/types → dist-types}/ts3.4/commands/ExecuteStatementCommand.d.ts +2 -2
- package/{dist/types → dist-types}/ts3.4/commands/ExecuteTransactionCommand.d.ts +3 -3
- package/{dist/types → dist-types}/ts3.4/commands/GetCommand.d.ts +2 -2
- package/{dist/types → dist-types}/ts3.4/commands/PutCommand.d.ts +2 -2
- package/{dist/types → dist-types}/ts3.4/commands/QueryCommand.d.ts +2 -2
- package/{dist/types → dist-types}/ts3.4/commands/ScanCommand.d.ts +2 -2
- package/{dist/types → dist-types}/ts3.4/commands/TransactGetCommand.d.ts +2 -2
- package/{dist/types → dist-types}/ts3.4/commands/TransactWriteCommand.d.ts +3 -3
- package/{dist/types → dist-types}/ts3.4/commands/UpdateCommand.d.ts +2 -2
- package/{dist/types → dist-types}/ts3.4/commands/utils.d.ts +0 -0
- package/{dist/types → dist-types}/ts3.4/index.d.ts +0 -0
- package/package.json +16 -12
- package/dist/cjs/DynamoDBDocument.js +0 -252
- package/dist/cjs/DynamoDBDocumentClient.js +0 -66
- package/dist/cjs/commands/BatchExecuteStatementCommand.js +0 -38
- package/dist/cjs/commands/BatchGetCommand.js +0 -53
- package/dist/cjs/commands/BatchWriteCommand.js +0 -64
- package/dist/cjs/commands/DeleteCommand.js +0 -50
- package/dist/cjs/commands/ExecuteStatementCommand.js +0 -38
- package/dist/cjs/commands/ExecuteTransactionCommand.js +0 -38
- package/dist/cjs/commands/GetCommand.js +0 -38
- package/dist/cjs/commands/PutCommand.js +0 -50
- package/dist/cjs/commands/QueryCommand.js +0 -53
- package/dist/cjs/commands/ScanCommand.js +0 -47
- package/dist/cjs/commands/TransactGetCommand.js +0 -38
- package/dist/cjs/commands/TransactWriteCommand.js +0 -55
- package/dist/cjs/commands/UpdateCommand.js +0 -56
- package/dist/cjs/commands/utils.js +0 -49
- package/dist/cjs/index.js +0 -19
- package/dist/es/DynamoDBDocument.js +0 -255
- package/dist/es/DynamoDBDocumentClient.js +0 -67
- package/dist/es/commands/BatchExecuteStatementCommand.js +0 -44
- package/dist/es/commands/BatchGetCommand.js +0 -59
- package/dist/es/commands/BatchWriteCommand.js +0 -70
- package/dist/es/commands/DeleteCommand.js +0 -56
- package/dist/es/commands/ExecuteStatementCommand.js +0 -44
- package/dist/es/commands/ExecuteTransactionCommand.js +0 -44
- package/dist/es/commands/GetCommand.js +0 -44
- package/dist/es/commands/PutCommand.js +0 -56
- package/dist/es/commands/QueryCommand.js +0 -59
- package/dist/es/commands/ScanCommand.js +0 -53
- package/dist/es/commands/TransactGetCommand.js +0 -44
- package/dist/es/commands/TransactWriteCommand.js +0 -61
- package/dist/es/commands/UpdateCommand.js +0 -62
- package/dist/es/commands/utils.js +0 -51
- package/dist/es/index.js +0 -16
- package/jest.config.js +0 -5
- package/tsconfig.cjs.json +0 -10
- package/tsconfig.es.json +0 -18
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { BatchStatementRequest, BatchStatementResponse, BatchExecuteStatementCommandInput as __BatchExecuteStatementCommandInput, BatchExecuteStatementCommandOutput as __BatchExecuteStatementCommandOutput } from "@aws-sdk/client-dynamodb";
|
|
1
|
+
import { BatchExecuteStatementCommandInput as __BatchExecuteStatementCommandInput, BatchExecuteStatementCommandOutput as __BatchExecuteStatementCommandOutput, BatchStatementRequest, BatchStatementResponse } from "@aws-sdk/client-dynamodb";
|
|
3
2
|
import { Command as $Command } from "@aws-sdk/smithy-client";
|
|
4
|
-
import { Handler,
|
|
3
|
+
import { Handler, HttpHandlerOptions as __HttpHandlerOptions, MiddlewareStack } from "@aws-sdk/types";
|
|
5
4
|
import { NativeAttributeValue } from "@aws-sdk/util-dynamodb";
|
|
5
|
+
import { DynamoDBDocumentClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../DynamoDBDocumentClient";
|
|
6
6
|
export declare type BatchExecuteStatementCommandInput = Pick<__BatchExecuteStatementCommandInput, Exclude<keyof __BatchExecuteStatementCommandInput, "Statements">> & {
|
|
7
7
|
Statements: (Pick<BatchStatementRequest, Exclude<keyof BatchStatementRequest, "Parameters">> & {
|
|
8
8
|
Parameters?: NativeAttributeValue[];
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { KeysAndAttributes, BatchGetItemCommandInput as __BatchGetItemCommandInput, BatchGetItemCommandOutput as __BatchGetItemCommandOutput } from "@aws-sdk/client-dynamodb";
|
|
1
|
+
import { BatchGetItemCommandInput as __BatchGetItemCommandInput, BatchGetItemCommandOutput as __BatchGetItemCommandOutput, KeysAndAttributes } from "@aws-sdk/client-dynamodb";
|
|
3
2
|
import { Command as $Command } from "@aws-sdk/smithy-client";
|
|
4
|
-
import { Handler,
|
|
3
|
+
import { Handler, HttpHandlerOptions as __HttpHandlerOptions, MiddlewareStack } from "@aws-sdk/types";
|
|
5
4
|
import { NativeAttributeValue } from "@aws-sdk/util-dynamodb";
|
|
5
|
+
import { DynamoDBDocumentClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../DynamoDBDocumentClient";
|
|
6
6
|
export declare type BatchGetCommandInput = Pick<__BatchGetItemCommandInput, Exclude<keyof __BatchGetItemCommandInput, "RequestItems">> & {
|
|
7
7
|
RequestItems: {
|
|
8
8
|
[key: string]: Pick<KeysAndAttributes, Exclude<keyof KeysAndAttributes, "Keys">> & {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { DeleteRequest, ItemCollectionMetrics, PutRequest, WriteRequest, BatchWriteItemCommandInput as __BatchWriteItemCommandInput, BatchWriteItemCommandOutput as __BatchWriteItemCommandOutput } from "@aws-sdk/client-dynamodb";
|
|
1
|
+
import { BatchWriteItemCommandInput as __BatchWriteItemCommandInput, BatchWriteItemCommandOutput as __BatchWriteItemCommandOutput, DeleteRequest, ItemCollectionMetrics, PutRequest, WriteRequest } from "@aws-sdk/client-dynamodb";
|
|
3
2
|
import { Command as $Command } from "@aws-sdk/smithy-client";
|
|
4
|
-
import { Handler,
|
|
3
|
+
import { Handler, HttpHandlerOptions as __HttpHandlerOptions, MiddlewareStack } from "@aws-sdk/types";
|
|
5
4
|
import { NativeAttributeValue } from "@aws-sdk/util-dynamodb";
|
|
5
|
+
import { DynamoDBDocumentClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../DynamoDBDocumentClient";
|
|
6
6
|
export declare type BatchWriteCommandInput = Pick<__BatchWriteItemCommandInput, Exclude<keyof __BatchWriteItemCommandInput, "RequestItems">> & {
|
|
7
7
|
RequestItems: {
|
|
8
8
|
[key: string]: (Pick<WriteRequest, Exclude<keyof WriteRequest, "PutRequest" | "DeleteRequest">> & {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ExpectedAttributeValue, ItemCollectionMetrics, DeleteItemCommandInput as __DeleteItemCommandInput, DeleteItemCommandOutput as __DeleteItemCommandOutput } from "@aws-sdk/client-dynamodb";
|
|
1
|
+
import { DeleteItemCommandInput as __DeleteItemCommandInput, DeleteItemCommandOutput as __DeleteItemCommandOutput, ExpectedAttributeValue, ItemCollectionMetrics } from "@aws-sdk/client-dynamodb";
|
|
3
2
|
import { Command as $Command } from "@aws-sdk/smithy-client";
|
|
4
|
-
import { Handler,
|
|
3
|
+
import { Handler, HttpHandlerOptions as __HttpHandlerOptions, MiddlewareStack } from "@aws-sdk/types";
|
|
5
4
|
import { NativeAttributeValue } from "@aws-sdk/util-dynamodb";
|
|
5
|
+
import { DynamoDBDocumentClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../DynamoDBDocumentClient";
|
|
6
6
|
export declare type DeleteCommandInput = Pick<__DeleteItemCommandInput, Exclude<keyof __DeleteItemCommandInput, "Key" | "Expected" | "ExpressionAttributeValues">> & {
|
|
7
7
|
Key: {
|
|
8
8
|
[key: string]: NativeAttributeValue;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { DynamoDBDocumentClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../DynamoDBDocumentClient";
|
|
2
1
|
import { ExecuteStatementCommandInput as __ExecuteStatementCommandInput, ExecuteStatementCommandOutput as __ExecuteStatementCommandOutput } from "@aws-sdk/client-dynamodb";
|
|
3
2
|
import { Command as $Command } from "@aws-sdk/smithy-client";
|
|
4
|
-
import { Handler,
|
|
3
|
+
import { Handler, HttpHandlerOptions as __HttpHandlerOptions, MiddlewareStack } from "@aws-sdk/types";
|
|
5
4
|
import { NativeAttributeValue } from "@aws-sdk/util-dynamodb";
|
|
5
|
+
import { DynamoDBDocumentClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../DynamoDBDocumentClient";
|
|
6
6
|
export declare type ExecuteStatementCommandInput = Pick<__ExecuteStatementCommandInput, Exclude<keyof __ExecuteStatementCommandInput, "Parameters">> & {
|
|
7
7
|
Parameters?: NativeAttributeValue[];
|
|
8
8
|
};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ItemResponse, ParameterizedStatement, ExecuteTransactionCommandInput as __ExecuteTransactionCommandInput, ExecuteTransactionCommandOutput as __ExecuteTransactionCommandOutput } from "@aws-sdk/client-dynamodb";
|
|
1
|
+
import { ExecuteTransactionCommandInput as __ExecuteTransactionCommandInput, ExecuteTransactionCommandOutput as __ExecuteTransactionCommandOutput, ItemResponse, ParameterizedStatement } from "@aws-sdk/client-dynamodb";
|
|
3
2
|
import { Command as $Command } from "@aws-sdk/smithy-client";
|
|
4
|
-
import { Handler,
|
|
3
|
+
import { Handler, HttpHandlerOptions as __HttpHandlerOptions, MiddlewareStack } from "@aws-sdk/types";
|
|
5
4
|
import { NativeAttributeValue } from "@aws-sdk/util-dynamodb";
|
|
5
|
+
import { DynamoDBDocumentClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../DynamoDBDocumentClient";
|
|
6
6
|
export declare type ExecuteTransactionCommandInput = Pick<__ExecuteTransactionCommandInput, Exclude<keyof __ExecuteTransactionCommandInput, "TransactStatements">> & {
|
|
7
7
|
TransactStatements: (Pick<ParameterizedStatement, Exclude<keyof ParameterizedStatement, "Parameters">> & {
|
|
8
8
|
Parameters?: NativeAttributeValue[];
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { DynamoDBDocumentClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../DynamoDBDocumentClient";
|
|
2
1
|
import { GetItemCommandInput as __GetItemCommandInput, GetItemCommandOutput as __GetItemCommandOutput } from "@aws-sdk/client-dynamodb";
|
|
3
2
|
import { Command as $Command } from "@aws-sdk/smithy-client";
|
|
4
|
-
import { Handler,
|
|
3
|
+
import { Handler, HttpHandlerOptions as __HttpHandlerOptions, MiddlewareStack } from "@aws-sdk/types";
|
|
5
4
|
import { NativeAttributeValue } from "@aws-sdk/util-dynamodb";
|
|
5
|
+
import { DynamoDBDocumentClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../DynamoDBDocumentClient";
|
|
6
6
|
export declare type GetCommandInput = Pick<__GetItemCommandInput, Exclude<keyof __GetItemCommandInput, "Key">> & {
|
|
7
7
|
Key: {
|
|
8
8
|
[key: string]: NativeAttributeValue;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { DynamoDBDocumentClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../DynamoDBDocumentClient";
|
|
2
1
|
import { ExpectedAttributeValue, ItemCollectionMetrics, PutItemCommandInput as __PutItemCommandInput, PutItemCommandOutput as __PutItemCommandOutput } from "@aws-sdk/client-dynamodb";
|
|
3
2
|
import { Command as $Command } from "@aws-sdk/smithy-client";
|
|
4
|
-
import { Handler,
|
|
3
|
+
import { Handler, HttpHandlerOptions as __HttpHandlerOptions, MiddlewareStack } from "@aws-sdk/types";
|
|
5
4
|
import { NativeAttributeValue } from "@aws-sdk/util-dynamodb";
|
|
5
|
+
import { DynamoDBDocumentClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../DynamoDBDocumentClient";
|
|
6
6
|
export declare type PutCommandInput = Pick<__PutItemCommandInput, Exclude<keyof __PutItemCommandInput, "Item" | "Expected" | "ExpressionAttributeValues">> & {
|
|
7
7
|
Item: {
|
|
8
8
|
[key: string]: NativeAttributeValue;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { DynamoDBDocumentClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../DynamoDBDocumentClient";
|
|
2
1
|
import { Condition, QueryCommandInput as __QueryCommandInput, QueryCommandOutput as __QueryCommandOutput } from "@aws-sdk/client-dynamodb";
|
|
3
2
|
import { Command as $Command } from "@aws-sdk/smithy-client";
|
|
4
|
-
import { Handler,
|
|
3
|
+
import { Handler, HttpHandlerOptions as __HttpHandlerOptions, MiddlewareStack } from "@aws-sdk/types";
|
|
5
4
|
import { NativeAttributeValue } from "@aws-sdk/util-dynamodb";
|
|
5
|
+
import { DynamoDBDocumentClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../DynamoDBDocumentClient";
|
|
6
6
|
export declare type QueryCommandInput = Pick<__QueryCommandInput, Exclude<keyof __QueryCommandInput, "KeyConditions" | "QueryFilter" | "ExclusiveStartKey" | "ExpressionAttributeValues">> & {
|
|
7
7
|
KeyConditions?: {
|
|
8
8
|
[key: string]: Pick<Condition, Exclude<keyof Condition, "AttributeValueList">> & {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { DynamoDBDocumentClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../DynamoDBDocumentClient";
|
|
2
1
|
import { Condition, ScanCommandInput as __ScanCommandInput, ScanCommandOutput as __ScanCommandOutput } from "@aws-sdk/client-dynamodb";
|
|
3
2
|
import { Command as $Command } from "@aws-sdk/smithy-client";
|
|
4
|
-
import { Handler,
|
|
3
|
+
import { Handler, HttpHandlerOptions as __HttpHandlerOptions, MiddlewareStack } from "@aws-sdk/types";
|
|
5
4
|
import { NativeAttributeValue } from "@aws-sdk/util-dynamodb";
|
|
5
|
+
import { DynamoDBDocumentClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../DynamoDBDocumentClient";
|
|
6
6
|
export declare type ScanCommandInput = Pick<__ScanCommandInput, Exclude<keyof __ScanCommandInput, "ScanFilter" | "ExclusiveStartKey" | "ExpressionAttributeValues">> & {
|
|
7
7
|
ScanFilter?: {
|
|
8
8
|
[key: string]: Pick<Condition, Exclude<keyof Condition, "AttributeValueList">> & {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { DynamoDBDocumentClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../DynamoDBDocumentClient";
|
|
2
1
|
import { Get, ItemResponse, TransactGetItem, TransactGetItemsCommandInput as __TransactGetItemsCommandInput, TransactGetItemsCommandOutput as __TransactGetItemsCommandOutput } from "@aws-sdk/client-dynamodb";
|
|
3
2
|
import { Command as $Command } from "@aws-sdk/smithy-client";
|
|
4
|
-
import { Handler,
|
|
3
|
+
import { Handler, HttpHandlerOptions as __HttpHandlerOptions, MiddlewareStack } from "@aws-sdk/types";
|
|
5
4
|
import { NativeAttributeValue } from "@aws-sdk/util-dynamodb";
|
|
5
|
+
import { DynamoDBDocumentClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../DynamoDBDocumentClient";
|
|
6
6
|
export declare type TransactGetCommandInput = Pick<__TransactGetItemsCommandInput, Exclude<keyof __TransactGetItemsCommandInput, "TransactItems">> & {
|
|
7
7
|
TransactItems: (Pick<TransactGetItem, Exclude<keyof TransactGetItem, "Get">> & {
|
|
8
8
|
Get: (Pick<Get, Exclude<keyof Get, "Key">> & {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ConditionCheck, Delete, ItemCollectionMetrics, Put, TransactWriteItem, Update, TransactWriteItemsCommandInput as __TransactWriteItemsCommandInput, TransactWriteItemsCommandOutput as __TransactWriteItemsCommandOutput } from "@aws-sdk/client-dynamodb";
|
|
1
|
+
import { ConditionCheck, Delete, ItemCollectionMetrics, Put, TransactWriteItem, TransactWriteItemsCommandInput as __TransactWriteItemsCommandInput, TransactWriteItemsCommandOutput as __TransactWriteItemsCommandOutput, Update } from "@aws-sdk/client-dynamodb";
|
|
3
2
|
import { Command as $Command } from "@aws-sdk/smithy-client";
|
|
4
|
-
import { Handler,
|
|
3
|
+
import { Handler, HttpHandlerOptions as __HttpHandlerOptions, MiddlewareStack } from "@aws-sdk/types";
|
|
5
4
|
import { NativeAttributeValue } from "@aws-sdk/util-dynamodb";
|
|
5
|
+
import { DynamoDBDocumentClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../DynamoDBDocumentClient";
|
|
6
6
|
export declare type TransactWriteCommandInput = Pick<__TransactWriteItemsCommandInput, Exclude<keyof __TransactWriteItemsCommandInput, "TransactItems">> & {
|
|
7
7
|
TransactItems: (Pick<TransactWriteItem, Exclude<keyof TransactWriteItem, "ConditionCheck" | "Put" | "Delete" | "Update">> & {
|
|
8
8
|
ConditionCheck?: Pick<ConditionCheck, Exclude<keyof ConditionCheck, "Key" | "ExpressionAttributeValues">> & {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { DynamoDBDocumentClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../DynamoDBDocumentClient";
|
|
2
1
|
import { AttributeValueUpdate, ExpectedAttributeValue, ItemCollectionMetrics, UpdateItemCommandInput as __UpdateItemCommandInput, UpdateItemCommandOutput as __UpdateItemCommandOutput } from "@aws-sdk/client-dynamodb";
|
|
3
2
|
import { Command as $Command } from "@aws-sdk/smithy-client";
|
|
4
|
-
import { Handler,
|
|
3
|
+
import { Handler, HttpHandlerOptions as __HttpHandlerOptions, MiddlewareStack } from "@aws-sdk/types";
|
|
5
4
|
import { NativeAttributeValue } from "@aws-sdk/util-dynamodb";
|
|
5
|
+
import { DynamoDBDocumentClientResolvedConfig, ServiceInputTypes, ServiceOutputTypes } from "../DynamoDBDocumentClient";
|
|
6
6
|
export declare type UpdateCommandInput = Pick<__UpdateItemCommandInput, Exclude<keyof __UpdateItemCommandInput, "Key" | "AttributeUpdates" | "Expected" | "ExpressionAttributeValues">> & {
|
|
7
7
|
Key: {
|
|
8
8
|
[key: string]: NativeAttributeValue;
|
|
File without changes
|
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws-sdk/lib-dynamodb",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.36.0",
|
|
4
4
|
"description": "The document client simplifies working with items in Amazon DynamoDB by abstracting away the notion of attribute values.",
|
|
5
|
-
"main": "./dist
|
|
6
|
-
"module": "./dist
|
|
7
|
-
"types": "./dist
|
|
5
|
+
"main": "./dist-cjs/index.js",
|
|
6
|
+
"module": "./dist-es/index.js",
|
|
7
|
+
"types": "./dist-types/index.d.ts",
|
|
8
8
|
"scripts": {
|
|
9
|
+
"build": "yarn build:cjs && yarn build:es && yarn build:types",
|
|
9
10
|
"build:cjs": "tsc -p tsconfig.cjs.json",
|
|
10
11
|
"build:es": "tsc -p tsconfig.es.json",
|
|
11
|
-
"build": "
|
|
12
|
-
"downlevel-dts": "downlevel-dts dist
|
|
12
|
+
"build:types": "tsc -p tsconfig.types.json",
|
|
13
|
+
"downlevel-dts": "downlevel-dts dist-types dist-types/ts3.4",
|
|
13
14
|
"test": "jest"
|
|
14
15
|
},
|
|
15
16
|
"engines": {
|
|
@@ -21,7 +22,7 @@
|
|
|
21
22
|
},
|
|
22
23
|
"license": "Apache-2.0",
|
|
23
24
|
"dependencies": {
|
|
24
|
-
"@aws-sdk/util-dynamodb": "3.
|
|
25
|
+
"@aws-sdk/util-dynamodb": "3.36.0",
|
|
25
26
|
"tslib": "^2.3.0"
|
|
26
27
|
},
|
|
27
28
|
"peerDependencies": {
|
|
@@ -30,9 +31,9 @@
|
|
|
30
31
|
"@aws-sdk/types": "^3.0.0"
|
|
31
32
|
},
|
|
32
33
|
"devDependencies": {
|
|
33
|
-
"@aws-sdk/client-dynamodb": "3.
|
|
34
|
-
"@aws-sdk/smithy-client": "3.
|
|
35
|
-
"@aws-sdk/types": "3.
|
|
34
|
+
"@aws-sdk/client-dynamodb": "3.36.0",
|
|
35
|
+
"@aws-sdk/smithy-client": "3.36.0",
|
|
36
|
+
"@aws-sdk/types": "3.36.0",
|
|
36
37
|
"@types/jest": "^26.0.4",
|
|
37
38
|
"@types/node": "^14.11.2",
|
|
38
39
|
"jest": "^26.4.2",
|
|
@@ -40,11 +41,14 @@
|
|
|
40
41
|
},
|
|
41
42
|
"typesVersions": {
|
|
42
43
|
"<4.0": {
|
|
43
|
-
"dist
|
|
44
|
-
"dist
|
|
44
|
+
"dist-types/*": [
|
|
45
|
+
"dist-types/ts3.4/*"
|
|
45
46
|
]
|
|
46
47
|
}
|
|
47
48
|
},
|
|
49
|
+
"files": [
|
|
50
|
+
"dist-*"
|
|
51
|
+
],
|
|
48
52
|
"homepage": "https://github.com/aws/aws-sdk-js-v3/tree/main/lib/lib-dynamodb",
|
|
49
53
|
"repository": {
|
|
50
54
|
"type": "git",
|
|
@@ -1,252 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DynamoDBDocument = void 0;
|
|
4
|
-
const DynamoDBDocumentClient_1 = require("./DynamoDBDocumentClient");
|
|
5
|
-
const BatchExecuteStatementCommand_1 = require("./commands/BatchExecuteStatementCommand");
|
|
6
|
-
const BatchGetCommand_1 = require("./commands/BatchGetCommand");
|
|
7
|
-
const BatchWriteCommand_1 = require("./commands/BatchWriteCommand");
|
|
8
|
-
const DeleteCommand_1 = require("./commands/DeleteCommand");
|
|
9
|
-
const ExecuteStatementCommand_1 = require("./commands/ExecuteStatementCommand");
|
|
10
|
-
const ExecuteTransactionCommand_1 = require("./commands/ExecuteTransactionCommand");
|
|
11
|
-
const GetCommand_1 = require("./commands/GetCommand");
|
|
12
|
-
const PutCommand_1 = require("./commands/PutCommand");
|
|
13
|
-
const QueryCommand_1 = require("./commands/QueryCommand");
|
|
14
|
-
const ScanCommand_1 = require("./commands/ScanCommand");
|
|
15
|
-
const TransactGetCommand_1 = require("./commands/TransactGetCommand");
|
|
16
|
-
const TransactWriteCommand_1 = require("./commands/TransactWriteCommand");
|
|
17
|
-
const UpdateCommand_1 = require("./commands/UpdateCommand");
|
|
18
|
-
/**
|
|
19
|
-
* The document client simplifies working with items in Amazon DynamoDB by
|
|
20
|
-
* abstracting away the notion of attribute values. This abstraction annotates native
|
|
21
|
-
* JavaScript types supplied as input parameters, as well as converts annotated
|
|
22
|
-
* response data to native JavaScript types.
|
|
23
|
-
*
|
|
24
|
-
* ## Marshalling Input and Unmarshalling Response Data
|
|
25
|
-
*
|
|
26
|
-
* The document client affords developers the use of native JavaScript types
|
|
27
|
-
* instead of `AttributeValue`s to simplify the JavaScript development
|
|
28
|
-
* experience with Amazon DynamoDB. JavaScript objects passed in as parameters
|
|
29
|
-
* are marshalled into `AttributeValue` shapes required by Amazon DynamoDB.
|
|
30
|
-
* Responses from DynamoDB are unmarshalled into plain JavaScript objects
|
|
31
|
-
* by the `DocumentClient`. The `DocumentClient` does not accept
|
|
32
|
-
* `AttributeValue`s in favor of native JavaScript types.
|
|
33
|
-
*
|
|
34
|
-
* | JavaScript Type | DynamoDB AttributeValue |
|
|
35
|
-
* | :-------------------------------: | ----------------------- |
|
|
36
|
-
* | String | S |
|
|
37
|
-
* | Number / BigInt | N |
|
|
38
|
-
* | Boolean | BOOL |
|
|
39
|
-
* | null | NULL |
|
|
40
|
-
* | Array | L |
|
|
41
|
-
* | Object | M |
|
|
42
|
-
* | Set\<Uint8Array, Blob, ...\> | BS |
|
|
43
|
-
* | Set\<Number, BigInt\> | NS |
|
|
44
|
-
* | Set\<String\> | SS |
|
|
45
|
-
* | Uint8Array, Buffer, File, Blob... | B |
|
|
46
|
-
*
|
|
47
|
-
* ### Example
|
|
48
|
-
*
|
|
49
|
-
* Here is an example list which is sent to DynamoDB client in an operation:
|
|
50
|
-
*
|
|
51
|
-
* ```json
|
|
52
|
-
* { "L": [{ "NULL": true }, { "BOOL": false }, { "N": 1 }, { "S": "two" }] }
|
|
53
|
-
* ```
|
|
54
|
-
*
|
|
55
|
-
* The DynamoDB document client abstracts the attribute values as follows in
|
|
56
|
-
* both input and output:
|
|
57
|
-
*
|
|
58
|
-
* ```json
|
|
59
|
-
* [null, false, 1, "two"]
|
|
60
|
-
* ```
|
|
61
|
-
*
|
|
62
|
-
* @see {@link https://www.npmjs.com/package/@aws-sdk/client-dynamodb @aws-sdk/client-dynamodb}
|
|
63
|
-
*/
|
|
64
|
-
class DynamoDBDocument extends DynamoDBDocumentClient_1.DynamoDBDocumentClient {
|
|
65
|
-
static from(client, translateConfig) {
|
|
66
|
-
return new DynamoDBDocument(client, translateConfig);
|
|
67
|
-
}
|
|
68
|
-
batchExecuteStatement(args, optionsOrCb, cb) {
|
|
69
|
-
const command = new BatchExecuteStatementCommand_1.BatchExecuteStatementCommand(args);
|
|
70
|
-
if (typeof optionsOrCb === "function") {
|
|
71
|
-
this.send(command, optionsOrCb);
|
|
72
|
-
}
|
|
73
|
-
else if (typeof cb === "function") {
|
|
74
|
-
if (typeof optionsOrCb !== "object")
|
|
75
|
-
throw new Error(`Expect http options but get ${typeof optionsOrCb}`);
|
|
76
|
-
this.send(command, optionsOrCb || {}, cb);
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
return this.send(command, optionsOrCb);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
batchGet(args, optionsOrCb, cb) {
|
|
83
|
-
const command = new BatchGetCommand_1.BatchGetCommand(args);
|
|
84
|
-
if (typeof optionsOrCb === "function") {
|
|
85
|
-
this.send(command, optionsOrCb);
|
|
86
|
-
}
|
|
87
|
-
else if (typeof cb === "function") {
|
|
88
|
-
if (typeof optionsOrCb !== "object")
|
|
89
|
-
throw new Error(`Expect http options but get ${typeof optionsOrCb}`);
|
|
90
|
-
this.send(command, optionsOrCb || {}, cb);
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
return this.send(command, optionsOrCb);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
batchWrite(args, optionsOrCb, cb) {
|
|
97
|
-
const command = new BatchWriteCommand_1.BatchWriteCommand(args);
|
|
98
|
-
if (typeof optionsOrCb === "function") {
|
|
99
|
-
this.send(command, optionsOrCb);
|
|
100
|
-
}
|
|
101
|
-
else if (typeof cb === "function") {
|
|
102
|
-
if (typeof optionsOrCb !== "object")
|
|
103
|
-
throw new Error(`Expect http options but get ${typeof optionsOrCb}`);
|
|
104
|
-
this.send(command, optionsOrCb || {}, cb);
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
return this.send(command, optionsOrCb);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
delete(args, optionsOrCb, cb) {
|
|
111
|
-
const command = new DeleteCommand_1.DeleteCommand(args);
|
|
112
|
-
if (typeof optionsOrCb === "function") {
|
|
113
|
-
this.send(command, optionsOrCb);
|
|
114
|
-
}
|
|
115
|
-
else if (typeof cb === "function") {
|
|
116
|
-
if (typeof optionsOrCb !== "object")
|
|
117
|
-
throw new Error(`Expect http options but get ${typeof optionsOrCb}`);
|
|
118
|
-
this.send(command, optionsOrCb || {}, cb);
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
return this.send(command, optionsOrCb);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
executeStatement(args, optionsOrCb, cb) {
|
|
125
|
-
const command = new ExecuteStatementCommand_1.ExecuteStatementCommand(args);
|
|
126
|
-
if (typeof optionsOrCb === "function") {
|
|
127
|
-
this.send(command, optionsOrCb);
|
|
128
|
-
}
|
|
129
|
-
else if (typeof cb === "function") {
|
|
130
|
-
if (typeof optionsOrCb !== "object")
|
|
131
|
-
throw new Error(`Expect http options but get ${typeof optionsOrCb}`);
|
|
132
|
-
this.send(command, optionsOrCb || {}, cb);
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
return this.send(command, optionsOrCb);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
executeTransaction(args, optionsOrCb, cb) {
|
|
139
|
-
const command = new ExecuteTransactionCommand_1.ExecuteTransactionCommand(args);
|
|
140
|
-
if (typeof optionsOrCb === "function") {
|
|
141
|
-
this.send(command, optionsOrCb);
|
|
142
|
-
}
|
|
143
|
-
else if (typeof cb === "function") {
|
|
144
|
-
if (typeof optionsOrCb !== "object")
|
|
145
|
-
throw new Error(`Expect http options but get ${typeof optionsOrCb}`);
|
|
146
|
-
this.send(command, optionsOrCb || {}, cb);
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
return this.send(command, optionsOrCb);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
get(args, optionsOrCb, cb) {
|
|
153
|
-
const command = new GetCommand_1.GetCommand(args);
|
|
154
|
-
if (typeof optionsOrCb === "function") {
|
|
155
|
-
this.send(command, optionsOrCb);
|
|
156
|
-
}
|
|
157
|
-
else if (typeof cb === "function") {
|
|
158
|
-
if (typeof optionsOrCb !== "object")
|
|
159
|
-
throw new Error(`Expect http options but get ${typeof optionsOrCb}`);
|
|
160
|
-
this.send(command, optionsOrCb || {}, cb);
|
|
161
|
-
}
|
|
162
|
-
else {
|
|
163
|
-
return this.send(command, optionsOrCb);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
put(args, optionsOrCb, cb) {
|
|
167
|
-
const command = new PutCommand_1.PutCommand(args);
|
|
168
|
-
if (typeof optionsOrCb === "function") {
|
|
169
|
-
this.send(command, optionsOrCb);
|
|
170
|
-
}
|
|
171
|
-
else if (typeof cb === "function") {
|
|
172
|
-
if (typeof optionsOrCb !== "object")
|
|
173
|
-
throw new Error(`Expect http options but get ${typeof optionsOrCb}`);
|
|
174
|
-
this.send(command, optionsOrCb || {}, cb);
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
return this.send(command, optionsOrCb);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
query(args, optionsOrCb, cb) {
|
|
181
|
-
const command = new QueryCommand_1.QueryCommand(args);
|
|
182
|
-
if (typeof optionsOrCb === "function") {
|
|
183
|
-
this.send(command, optionsOrCb);
|
|
184
|
-
}
|
|
185
|
-
else if (typeof cb === "function") {
|
|
186
|
-
if (typeof optionsOrCb !== "object")
|
|
187
|
-
throw new Error(`Expect http options but get ${typeof optionsOrCb}`);
|
|
188
|
-
this.send(command, optionsOrCb || {}, cb);
|
|
189
|
-
}
|
|
190
|
-
else {
|
|
191
|
-
return this.send(command, optionsOrCb);
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
scan(args, optionsOrCb, cb) {
|
|
195
|
-
const command = new ScanCommand_1.ScanCommand(args);
|
|
196
|
-
if (typeof optionsOrCb === "function") {
|
|
197
|
-
this.send(command, optionsOrCb);
|
|
198
|
-
}
|
|
199
|
-
else if (typeof cb === "function") {
|
|
200
|
-
if (typeof optionsOrCb !== "object")
|
|
201
|
-
throw new Error(`Expect http options but get ${typeof optionsOrCb}`);
|
|
202
|
-
this.send(command, optionsOrCb || {}, cb);
|
|
203
|
-
}
|
|
204
|
-
else {
|
|
205
|
-
return this.send(command, optionsOrCb);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
transactGet(args, optionsOrCb, cb) {
|
|
209
|
-
const command = new TransactGetCommand_1.TransactGetCommand(args);
|
|
210
|
-
if (typeof optionsOrCb === "function") {
|
|
211
|
-
this.send(command, optionsOrCb);
|
|
212
|
-
}
|
|
213
|
-
else if (typeof cb === "function") {
|
|
214
|
-
if (typeof optionsOrCb !== "object")
|
|
215
|
-
throw new Error(`Expect http options but get ${typeof optionsOrCb}`);
|
|
216
|
-
this.send(command, optionsOrCb || {}, cb);
|
|
217
|
-
}
|
|
218
|
-
else {
|
|
219
|
-
return this.send(command, optionsOrCb);
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
transactWrite(args, optionsOrCb, cb) {
|
|
223
|
-
const command = new TransactWriteCommand_1.TransactWriteCommand(args);
|
|
224
|
-
if (typeof optionsOrCb === "function") {
|
|
225
|
-
this.send(command, optionsOrCb);
|
|
226
|
-
}
|
|
227
|
-
else if (typeof cb === "function") {
|
|
228
|
-
if (typeof optionsOrCb !== "object")
|
|
229
|
-
throw new Error(`Expect http options but get ${typeof optionsOrCb}`);
|
|
230
|
-
this.send(command, optionsOrCb || {}, cb);
|
|
231
|
-
}
|
|
232
|
-
else {
|
|
233
|
-
return this.send(command, optionsOrCb);
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
update(args, optionsOrCb, cb) {
|
|
237
|
-
const command = new UpdateCommand_1.UpdateCommand(args);
|
|
238
|
-
if (typeof optionsOrCb === "function") {
|
|
239
|
-
this.send(command, optionsOrCb);
|
|
240
|
-
}
|
|
241
|
-
else if (typeof cb === "function") {
|
|
242
|
-
if (typeof optionsOrCb !== "object")
|
|
243
|
-
throw new Error(`Expect http options but get ${typeof optionsOrCb}`);
|
|
244
|
-
this.send(command, optionsOrCb || {}, cb);
|
|
245
|
-
}
|
|
246
|
-
else {
|
|
247
|
-
return this.send(command, optionsOrCb);
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
exports.DynamoDBDocument = DynamoDBDocument;
|
|
252
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRHluYW1vREJEb2N1bWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9EeW5hbW9EQkRvY3VtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUFtRjtBQUNuRiwwRkFJaUQ7QUFDakQsZ0VBQTBHO0FBQzFHLG9FQUFrSDtBQUNsSCw0REFBa0c7QUFDbEcsZ0ZBSTRDO0FBQzVDLG9GQUk4QztBQUM5QyxzREFBc0Y7QUFDdEYsc0RBQXNGO0FBQ3RGLDBEQUE4RjtBQUM5Rix3REFBMEY7QUFDMUYsc0VBQXNIO0FBQ3RILDBFQUl5QztBQUN6Qyw0REFBa0c7QUFJbEc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZDRztBQUNILE1BQWEsZ0JBQWlCLFNBQVEsK0NBQXNCO0lBQzFELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBc0IsRUFBRSxlQUFpQztRQUNuRSxPQUFPLElBQUksZ0JBQWdCLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFzQk0scUJBQXFCLENBQzFCLElBQXVDLEVBQ3ZDLFdBQW9HLEVBQ3BHLEVBQWtFO1FBRWxFLE1BQU0sT0FBTyxHQUFHLElBQUksMkRBQTRCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsSUFBSSxPQUFPLFdBQVcsS0FBSyxVQUFVLEVBQUU7WUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDakM7YUFBTSxJQUFJLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRTtZQUNuQyxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVE7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsT0FBTyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQzFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDM0M7YUFB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QUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ2pDO2FBQU0sSUFBSSxPQUFPLEVBQUUsS0FBSyxVQUFVLEVBQUU7WUFDbkMsSUFBSSxPQUFPLFdBQVcsS0FBSyxRQUFRO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLE9BQU8sV0FBVyxFQUFFLENBQUMsQ0FBQztZQUMxRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzNDO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ3hDO0lBQ0gsQ0FBQztDQUNGO0FBbGFELDRDQWthQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER5bmFtb0RCRG9jdW1lbnRDbGllbnQsIFRyYW5zbGF0ZUNvbmZpZyB9IGZyb20gXCIuL0R5bmFtb0RCRG9jdW1lbnRDbGllbnRcIjtcbmltcG9ydCB7XG4gIEJhdGNoRXhlY3V0ZVN0YXRlbWVudENvbW1hbmQsXG4gIEJhdGNoRXhlY3V0ZVN0YXRlbWVudENvbW1hbmRJbnB1dCxcbiAgQmF0Y2hFeGVjdXRlU3RhdGVtZW50Q29tbWFuZE91dHB1dCxcbn0gZnJvbSBcIi4vY29tbWFuZHMvQmF0Y2hFeGVjdXRlU3RhdGVtZW50Q29tbWFuZFwiO1xuaW1wb3J0IHsgQmF0Y2hHZXRDb21tYW5kLCBCYXRjaEdldENvbW1hbmRJbnB1dCwgQmF0Y2hHZXRDb21tYW5kT3V0cHV0IH0gZnJvbSBcIi4vY29tbWFuZHMvQmF0Y2hHZXRDb21tYW5kXCI7XG5pbXBvcnQgeyBCYXRjaFdyaXRlQ29tbWFuZCwgQmF0Y2hXcml0ZUNvbW1hbmRJbnB1dCwgQmF0Y2hXcml0ZUNvbW1hbmRPdXRwdXQgfSBmcm9tIFwiLi9jb21tYW5kcy9CYXRjaFdyaXRlQ29tbWFuZFwiO1xuaW1wb3J0IHsgRGVsZXRlQ29tbWFuZCwgRGVsZXRlQ29tbWFuZElucHV0LCBEZWxldGVDb21tYW5kT3V0cHV0IH0gZnJvbSBcIi4vY29tbWFuZHMvRGVsZXRlQ29tbWFuZFwiO1xuaW1wb3J0IHtcbiAgRXhlY3V0ZVN0YXRlbWVudENvbW1hbmQsXG4gIEV4ZWN1dGVTdGF0ZW1lbnRDb21tYW5kSW5wdXQsXG4gIEV4ZWN1dGVTdGF0ZW1lbnRDb21tYW5kT3V0cHV0LFxufSBmcm9tIFwiLi9jb21tYW5kcy9FeGVjdXRlU3RhdGVtZW50Q29tbWFuZFwiO1xuaW1wb3J0IHtcbiAgRXhlY3V0ZVRyYW5zYWN0aW9uQ29tbWFuZCxcbiAgRXhlY3V0ZVRyYW5zYWN0aW9uQ29tbWFuZElucHV0LFxuICBFeGVjdXRlVHJhbnNhY3Rpb25Db21tYW5kT3V0cHV0LFxufSBmcm9tIFwiLi9jb21tYW5kcy9FeGVjdXRlVHJhbnNhY3Rpb25Db21tYW5kXCI7XG5pbXBvcnQgeyBHZXRDb21tYW5kLCBHZXRDb21tYW5kSW5wdXQsIEdldENvbW1hbmRPdXRwdXQgfSBmcm9tIFwiLi9jb21tYW5kcy9HZXRDb21tYW5kXCI7XG5pbXBvcnQgeyBQdXRDb21tYW5kLCBQdXRDb21tYW5kSW5wdXQsIFB1dENvbW1hbmRPdXRwdXQgfSBmcm9tIFwiLi9jb21tYW5kcy9QdXRDb21tYW5kXCI7XG5pbXBvcnQgeyBRdWVyeUNvbW1hbmQsIFF1ZXJ5Q29tbWFuZElucHV0LCBRdWVyeUNvbW1hbmRPdXRwdXQgfSBmcm9tIFwiLi9jb21tYW5kcy9RdWVyeUNvbW1hbmRcIjtcbmltcG9ydCB7IFNjYW5Db21tYW5kLCBTY2FuQ29tbWFuZElucHV0LCBTY2FuQ29tbWFuZE91dHB1dCB9IGZyb20gXCIuL2NvbW1hbmRzL1NjYW5Db21tYW5kXCI7XG5pbXBvcnQgeyBUcmFuc2FjdEdldENvbW1hbmQsIFRyYW5zYWN0R2V0Q29tbWFuZElucHV0LCBUcmFuc2FjdEdldENvbW1hbmRPdXRwdXQgfSBmcm9tIFwiLi9jb21tYW5kcy9UcmFuc2FjdEdldENvbW1hbmRcIjtcbmltcG9ydCB7XG4gIFRyYW5zYWN0V3JpdGVDb21tYW5kLFxuICBUcmFuc2FjdFdyaXRlQ29tbWFuZElucHV0LFxuICBUcmFuc2FjdFdyaXRlQ29tbWFuZE91dHB1dCxcbn0gZnJvbSBcIi4vY29tbWFuZHMvVHJhbnNhY3RXcml0ZUNvbW1hbmRcIjtcbmltcG9ydCB7IFVwZGF0ZUNvbW1hbmQsIFVwZGF0ZUNvbW1hbmRJbnB1dCwgVXBkYXRlQ29tbWFuZE91dHB1dCB9IGZyb20gXCIuL2NvbW1hbmRzL1VwZGF0ZUNvbW1hbmRcIjtcbmltcG9ydCB7IER5bmFtb0RCQ2xpZW50IH0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1keW5hbW9kYlwiO1xuaW1wb3J0IHsgSHR0cEhhbmRsZXJPcHRpb25zIGFzIF9fSHR0cEhhbmRsZXJPcHRpb25zIH0gZnJvbSBcIkBhd3Mtc2RrL3R5cGVzXCI7XG5cbi8qKlxuICogVGhlIGRvY3VtZW50IGNsaWVudCBzaW1wbGlmaWVzIHdvcmtpbmcgd2l0aCBpdGVtcyBpbiBBbWF6b24gRHluYW1vREIgYnlcbiAqIGFic3RyYWN0aW5nIGF3YXkgdGhlIG5vdGlvbiBvZiBhdHRyaWJ1dGUgdmFsdWVzLiBUaGlzIGFic3RyYWN0aW9uIGFubm90YXRlcyBuYXRpdmVcbiAqIEphdmFTY3JpcHQgdHlwZXMgc3VwcGxpZWQgYXMgaW5wdXQgcGFyYW1ldGVycywgYXMgd2VsbCBhcyBjb252ZXJ0cyBhbm5vdGF0ZWRcbiAqIHJlc3BvbnNlIGRhdGEgdG8gbmF0aXZlIEphdmFTY3JpcHQgdHlwZXMuXG4gKlxuICogIyMgTWFyc2hhbGxpbmcgSW5wdXQgYW5kIFVubWFyc2hhbGxpbmcgUmVzcG9uc2UgRGF0YVxuICpcbiAqIFRoZSBkb2N1bWVudCBjbGllbnQgYWZmb3JkcyBkZXZlbG9wZXJzIHRoZSB1c2Ugb2YgbmF0aXZlIEphdmFTY3JpcHQgdHlwZXNcbiAqIGluc3RlYWQgb2YgYEF0dHJpYnV0ZVZhbHVlYHMgdG8gc2ltcGxpZnkgdGhlIEphdmFTY3JpcHQgZGV2ZWxvcG1lbnRcbiAqIGV4cGVyaWVuY2Ugd2l0aCBBbWF6b24gRHluYW1vREIuIEphdmFTY3JpcHQgb2JqZWN0cyBwYXNzZWQgaW4gYXMgcGFyYW1ldGVyc1xuICogYXJlIG1hcnNoYWxsZWQgaW50byBgQXR0cmlidXRlVmFsdWVgIHNoYXBlcyByZXF1aXJlZCBieSBBbWF6b24gRHluYW1vREIuXG4gKiBSZXNwb25zZXMgZnJvbSBEeW5hbW9EQiBhcmUgdW5tYXJzaGFsbGVkIGludG8gcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzXG4gKiBieSB0aGUgYERvY3VtZW50Q2xpZW50YC4gVGhlIGBEb2N1bWVudENsaWVudGAgZG9lcyBub3QgYWNjZXB0XG4gKiBgQXR0cmlidXRlVmFsdWVgcyBpbiBmYXZvciBvZiBuYXRpdmUgSmF2YVNjcmlwdCB0eXBlcy5cbiAqXG4gKiB8ICAgICAgICAgIEphdmFTY3JpcHQgVHlwZSAgICAgICAgICB8IER5bmFtb0RCIEF0dHJpYnV0ZVZhbHVlIHxcbiAqIHwgOi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS06IHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICogfCAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgfCBTICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICAgICAgICAgIE51bWJlciAvIEJpZ0ludCAgICAgICAgICB8IE4gICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgIEJvb2xlYW4gICAgICAgICAgICAgIHwgQk9PTCAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgICAgICAgICAgICAgIG51bGwgICAgICAgICAgICAgICAgfCBOVUxMICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgQXJyYXkgICAgICAgICAgICAgICB8IEwgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgIE9iamVjdCAgICAgICAgICAgICAgIHwgTSAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgIFNldFxcPFVpbnQ4QXJyYXksIEJsb2IsIC4uLlxcPiAgICB8IEJTICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgICAgICAgU2V0XFw8TnVtYmVyLCBCaWdJbnRcXD4gICAgICAgfCBOUyAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICAgICAgICAgICBTZXRcXDxTdHJpbmdcXD4gICAgICAgICAgIHwgU1MgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBVaW50OEFycmF5LCBCdWZmZXIsIEZpbGUsIEJsb2IuLi4gfCBCICAgICAgICAgICAgICAgICAgICAgICB8XG4gKlxuICogIyMjIEV4YW1wbGVcbiAqXG4gKiBIZXJlIGlzIGFuIGV4YW1wbGUgbGlzdCB3aGljaCBpcyBzZW50IHRvIER5bmFtb0RCIGNsaWVudCBpbiBhbiBvcGVyYXRpb246XG4gKlxuICogYGBganNvblxuICogeyBcIkxcIjogW3sgXCJOVUxMXCI6IHRydWUgfSwgeyBcIkJPT0xcIjogZmFsc2UgfSwgeyBcIk5cIjogMSB9LCB7IFwiU1wiOiBcInR3b1wiIH1dIH1cbiAqIGBgYFxuICpcbiAqIFRoZSBEeW5hbW9EQiBkb2N1bWVudCBjbGllbnQgYWJzdHJhY3RzIHRoZSBhdHRyaWJ1dGUgdmFsdWVzIGFzIGZvbGxvd3MgaW5cbiAqIGJvdGggaW5wdXQgYW5kIG91dHB1dDpcbiAqXG4gKiBgYGBqc29uXG4gKiBbbnVsbCwgZmFsc2UsIDEsIFwidHdvXCJdXG4gKiBgYGBcbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9AYXdzLXNkay9jbGllbnQtZHluYW1vZGIgQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RifVxuICovXG5leHBvcnQgY2xhc3MgRHluYW1vREJEb2N1bWVudCBleHRlbmRzIER5bmFtb0RCRG9jdW1lbnRDbGllbnQge1xuICBzdGF0aWMgZnJvbShjbGllbnQ6IER5bmFtb0RCQ2xpZW50LCB0cmFuc2xhdGVDb25maWc/OiBUcmFuc2xhdGVDb25maWcpIHtcbiAgICByZXR1cm4gbmV3IER5bmFtb0RCRG9jdW1lbnQoY2xpZW50LCB0cmFuc2xhdGVDb25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjY2VwdHMgbmF0aXZlIEphdmFTY3JpcHQgdHlwZXMgaW5zdGVhZCBvZiBgQXR0cmlidXRlVmFsdWVgcywgYW5kIGNhbGxzXG4gICAqIEJhdGNoRXhlY3V0ZVN0YXRlbWVudENvbW1hbmQgb3BlcmF0aW9uIGZyb20ge0BsaW5rIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL0Bhd3Mtc2RrL2NsaWVudC1keW5hbW9kYiBAYXdzLXNkay9jbGllbnQtZHluYW1vZGJ9LlxuICAgKlxuICAgKiBKYXZhU2NyaXB0IG9iamVjdHMgcGFzc2VkIGluIGFzIHBhcmFtZXRlcnMgYXJlIG1hcnNoYWxsZWQgaW50byBgQXR0cmlidXRlVmFsdWVgIHNoYXBlc1xuICAgKiByZXF1aXJlZCBieSBBbWF6b24gRHluYW1vREIuIFJlc3BvbnNlcyBmcm9tIER5bmFtb0RCIGFyZSB1bm1hcnNoYWxsZWQgaW50byBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gICAqL1xuICBwdWJsaWMgYmF0Y2hFeGVjdXRlU3RhdGVtZW50KFxuICAgIGFyZ3M6IEJhdGNoRXhlY3V0ZVN0YXRlbWVudENvbW1hbmRJbnB1dCxcbiAgICBvcHRpb25zPzogX19IdHRwSGFuZGxlck9wdGlvbnNcbiAgKTogUHJvbWlzZTxCYXRjaEV4ZWN1dGVTdGF0ZW1lbnRDb21tYW5kT3V0cHV0PjtcbiAgcHVibGljIGJhdGNoRXhlY3V0ZVN0YXRlbWVudChcbiAgICBhcmdzOiBCYXRjaEV4ZWN1dGVTdGF0ZW1lbnRDb21tYW5kSW5wdXQsXG4gICAgY2I6IChlcnI6IGFueSwgZGF0YT86IEJhdGNoRXhlY3V0ZVN0YXRlbWVudENvbW1hbmRPdXRwdXQpID0+IHZvaWRcbiAgKTogdm9pZDtcbiAgcHVibGljIGJhdGNoRXhlY3V0ZVN0YXRlbWVudChcbiAgICBhcmdzOiBCYXRjaEV4ZWN1dGVTdGF0ZW1lbnRDb21tYW5kSW5wdXQsXG4gICAgb3B0aW9uczogX19IdHRwSGFuZGxlck9wdGlvbnMsXG4gICAgY2I6IChlcnI6IGFueSwgZGF0YT86IEJhdGNoRXhlY3V0ZVN0YXRlbWVudENvbW1hbmRPdXRwdXQpID0+IHZvaWRcbiAgKTogdm9pZDtcbiAgcHVibGljIGJhdGNoRXhlY3V0ZVN0YXRlbWVudChcbiAgICBhcmdzOiBCYXRjaEV4ZWN1dGVTdGF0ZW1lbnRDb21tYW5kSW5wdXQsXG4gICAgb3B0aW9uc09yQ2I/OiBfX0h0dHBIYW5kbGVyT3B0aW9ucyB8ICgoZXJyOiBhbnksIGRhdGE/OiBCYXRjaEV4ZWN1dGVTdGF0ZW1lbnRDb21tYW5kT3V0cHV0KSA9PiB2b2lkKSxcbiAgICBjYj86IChlcnI6IGFueSwgZGF0YT86IEJhdGNoRXhlY3V0ZVN0YXRlbWVudENvbW1hbmRPdXRwdXQpID0+IHZvaWRcbiAgKTogUHJvbWlzZTxCYXRjaEV4ZWN1dGVTdGF0ZW1lbnRDb21tYW5kT3V0cHV0PiB8IHZvaWQge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgQmF0Y2hFeGVjdXRlU3RhdGVtZW50Q29tbWFuZChhcmdzKTtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnNPckNiID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuc2VuZChjb21tYW5kLCBvcHRpb25zT3JDYik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY2IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zT3JDYiAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3QgaHR0cCBvcHRpb25zIGJ1dCBnZXQgJHt0eXBlb2Ygb3B0aW9uc09yQ2J9YCk7XG4gICAgICB0aGlzLnNlbmQoY29tbWFuZCwgb3B0aW9uc09yQ2IgfHwge30sIGNiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuc2VuZChjb21tYW5kLCBvcHRpb25zT3JDYik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFjY2VwdHMgbmF0aXZlIEphdmFTY3JpcHQgdHlwZXMgaW5zdGVhZCBvZiBgQXR0cmlidXRlVmFsdWVgcywgYW5kIGNhbGxzXG4gICAqIEJhdGNoR2V0SXRlbUNvbW1hbmQgb3BlcmF0aW9uIGZyb20ge0BsaW5rIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL0Bhd3Mtc2RrL2NsaWVudC1keW5hbW9kYiBAYXdzLXNkay9jbGllbnQtZHluYW1vZGJ9LlxuICAgKlxuICAgKiBKYXZhU2NyaXB0IG9iamVjdHMgcGFzc2VkIGluIGFzIHBhcmFtZXRlcnMgYXJlIG1hcnNoYWxsZWQgaW50byBgQXR0cmlidXRlVmFsdWVgIHNoYXBlc1xuICAgKiByZXF1aXJlZCBieSBBbWF6b24gRHluYW1vREIuIFJlc3BvbnNlcyBmcm9tIER5bmFtb0RCIGFyZSB1bm1hcnNoYWxsZWQgaW50byBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gICAqL1xuICBwdWJsaWMgYmF0Y2hHZXQoYXJnczogQmF0Y2hHZXRDb21tYW5kSW5wdXQsIG9wdGlvbnM/OiBfX0h0dHBIYW5kbGVyT3B0aW9ucyk6IFByb21pc2U8QmF0Y2hHZXRDb21tYW5kT3V0cHV0PjtcbiAgcHVibGljIGJhdGNoR2V0KGFyZ3M6IEJhdGNoR2V0Q29tbWFuZElucHV0LCBjYjogKGVycjogYW55LCBkYXRhPzogQmF0Y2hHZXRDb21tYW5kT3V0cHV0KSA9PiB2b2lkKTogdm9pZDtcbiAgcHVibGljIGJhdGNoR2V0KFxuICAgIGFyZ3M6IEJhdGNoR2V0Q29tbWFuZElucHV0LFxuICAgIG9wdGlvbnM6IF9fSHR0cEhhbmRsZXJPcHRpb25zLFxuICAgIGNiOiAoZXJyOiBhbnksIGRhdGE/OiBCYXRjaEdldENvbW1hbmRPdXRwdXQpID0+IHZvaWRcbiAgKTogdm9pZDtcbiAgcHVibGljIGJhdGNoR2V0KFxuICAgIGFyZ3M6IEJhdGNoR2V0Q29tbWFuZElucHV0LFxuICAgIG9wdGlvbnNPckNiPzogX19IdHRwSGFuZGxlck9wdGlvbnMgfCAoKGVycjogYW55LCBkYXRhPzogQmF0Y2hHZXRDb21tYW5kT3V0cHV0KSA9PiB2b2lkKSxcbiAgICBjYj86IChlcnI6IGFueSwgZGF0YT86IEJhdGNoR2V0Q29tbWFuZE91dHB1dCkgPT4gdm9pZFxuICApOiBQcm9taXNlPEJhdGNoR2V0Q29tbWFuZE91dHB1dD4gfCB2b2lkIHtcbiAgICBjb25zdCBjb21tYW5kID0gbmV3IEJhdGNoR2V0Q29tbWFuZChhcmdzKTtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnNPckNiID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuc2VuZChjb21tYW5kLCBvcHRpb25zT3JDYik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY2IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zT3JDYiAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3QgaHR0cCBvcHRpb25zIGJ1dCBnZXQgJHt0eXBlb2Ygb3B0aW9uc09yQ2J9YCk7XG4gICAgICB0aGlzLnNlbmQoY29tbWFuZCwgb3B0aW9uc09yQ2IgfHwge30sIGNiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuc2VuZChjb21tYW5kLCBvcHRpb25zT3JDYik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFjY2VwdHMgbmF0aXZlIEphdmFTY3JpcHQgdHlwZXMgaW5zdGVhZCBvZiBgQXR0cmlidXRlVmFsdWVgcywgYW5kIGNhbGxzXG4gICAqIEJhdGNoV3JpdGVJdGVtQ29tbWFuZCBvcGVyYXRpb24gZnJvbSB7QGxpbmsgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RiIEBhd3Mtc2RrL2NsaWVudC1keW5hbW9kYn0uXG4gICAqXG4gICAqIEphdmFTY3JpcHQgb2JqZWN0cyBwYXNzZWQgaW4gYXMgcGFyYW1ldGVycyBhcmUgbWFyc2hhbGxlZCBpbnRvIGBBdHRyaWJ1dGVWYWx1ZWAgc2hhcGVzXG4gICAqIHJlcXVpcmVkIGJ5IEFtYXpvbiBEeW5hbW9EQi4gUmVzcG9uc2VzIGZyb20gRHluYW1vREIgYXJlIHVubWFyc2hhbGxlZCBpbnRvIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAgICovXG4gIHB1YmxpYyBiYXRjaFdyaXRlKGFyZ3M6IEJhdGNoV3JpdGVDb21tYW5kSW5wdXQsIG9wdGlvbnM/OiBfX0h0dHBIYW5kbGVyT3B0aW9ucyk6IFByb21pc2U8QmF0Y2hXcml0ZUNvbW1hbmRPdXRwdXQ+O1xuICBwdWJsaWMgYmF0Y2hXcml0ZShhcmdzOiBCYXRjaFdyaXRlQ29tbWFuZElucHV0LCBjYjogKGVycjogYW55LCBkYXRhPzogQmF0Y2hXcml0ZUNvbW1hbmRPdXRwdXQpID0+IHZvaWQpOiB2b2lkO1xuICBwdWJsaWMgYmF0Y2hXcml0ZShcbiAgICBhcmdzOiBCYXRjaFdyaXRlQ29tbWFuZElucHV0LFxuICAgIG9wdGlvbnM6IF9fSHR0cEhhbmRsZXJPcHRpb25zLFxuICAgIGNiOiAoZXJyOiBhbnksIGRhdGE/OiBCYXRjaFdyaXRlQ29tbWFuZE91dHB1dCkgPT4gdm9pZFxuICApOiB2b2lkO1xuICBwdWJsaWMgYmF0Y2hXcml0ZShcbiAgICBhcmdzOiBCYXRjaFdyaXRlQ29tbWFuZElucHV0LFxuICAgIG9wdGlvbnNPckNiPzogX19IdHRwSGFuZGxlck9wdGlvbnMgfCAoKGVycjogYW55LCBkYXRhPzogQmF0Y2hXcml0ZUNvbW1hbmRPdXRwdXQpID0+IHZvaWQpLFxuICAgIGNiPzogKGVycjogYW55LCBkYXRhPzogQmF0Y2hXcml0ZUNvbW1hbmRPdXRwdXQpID0+IHZvaWRcbiAgKTogUHJvbWlzZTxCYXRjaFdyaXRlQ29tbWFuZE91dHB1dD4gfCB2b2lkIHtcbiAgICBjb25zdCBjb21tYW5kID0gbmV3IEJhdGNoV3JpdGVDb21tYW5kKGFyZ3MpO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yQ2IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5zZW5kKGNvbW1hbmQsIG9wdGlvbnNPckNiKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjYiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnNPckNiICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdCBodHRwIG9wdGlvbnMgYnV0IGdldCAke3R5cGVvZiBvcHRpb25zT3JDYn1gKTtcbiAgICAgIHRoaXMuc2VuZChjb21tYW5kLCBvcHRpb25zT3JDYiB8fCB7fSwgY2IpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5zZW5kKGNvbW1hbmQsIG9wdGlvbnNPckNiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWNjZXB0cyBuYXRpdmUgSmF2YVNjcmlwdCB0eXBlcyBpbnN0ZWFkIG9mIGBBdHRyaWJ1dGVWYWx1ZWBzLCBhbmQgY2FsbHNcbiAgICogRGVsZXRlSXRlbUNvbW1hbmQgb3BlcmF0aW9uIGZyb20ge0BsaW5rIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL0Bhd3Mtc2RrL2NsaWVudC1keW5hbW9kYiBAYXdzLXNkay9jbGllbnQtZHluYW1vZGJ9LlxuICAgKlxuICAgKiBKYXZhU2NyaXB0IG9iamVjdHMgcGFzc2VkIGluIGFzIHBhcmFtZXRlcnMgYXJlIG1hcnNoYWxsZWQgaW50byBgQXR0cmlidXRlVmFsdWVgIHNoYXBlc1xuICAgKiByZXF1aXJlZCBieSBBbWF6b24gRHluYW1vREIuIFJlc3BvbnNlcyBmcm9tIER5bmFtb0RCIGFyZSB1bm1hcnNoYWxsZWQgaW50byBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gICAqL1xuICBwdWJsaWMgZGVsZXRlKGFyZ3M6IERlbGV0ZUNvbW1hbmRJbnB1dCwgb3B0aW9ucz86IF9fSHR0cEhhbmRsZXJPcHRpb25zKTogUHJvbWlzZTxEZWxldGVDb21tYW5kT3V0cHV0PjtcbiAgcHVibGljIGRlbGV0ZShhcmdzOiBEZWxldGVDb21tYW5kSW5wdXQsIGNiOiAoZXJyOiBhbnksIGRhdGE/OiBEZWxldGVDb21tYW5kT3V0cHV0KSA9PiB2b2lkKTogdm9pZDtcbiAgcHVibGljIGRlbGV0ZShcbiAgICBhcmdzOiBEZWxldGVDb21tYW5kSW5wdXQsXG4gICAgb3B0aW9uczogX19IdHRwSGFuZGxlck9wdGlvbnMsXG4gICAgY2I6IChlcnI6IGFueSwgZGF0YT86IERlbGV0ZUNvbW1hbmRPdXRwdXQpID0+IHZvaWRcbiAgKTogdm9pZDtcbiAgcHVibGljIGRlbGV0ZShcbiAgICBhcmdzOiBEZWxldGVDb21tYW5kSW5wdXQsXG4gICAgb3B0aW9uc09yQ2I/OiBfX0h0dHBIYW5kbGVyT3B0aW9ucyB8ICgoZXJyOiBhbnksIGRhdGE/OiBEZWxldGVDb21tYW5kT3V0cHV0KSA9PiB2b2lkKSxcbiAgICBjYj86IChlcnI6IGFueSwgZGF0YT86IERlbGV0ZUNvbW1hbmRPdXRwdXQpID0+IHZvaWRcbiAgKTogUHJvbWlzZTxEZWxldGVDb21tYW5kT3V0cHV0PiB8IHZvaWQge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgRGVsZXRlQ29tbWFuZChhcmdzKTtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnNPckNiID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuc2VuZChjb21tYW5kLCBvcHRpb25zT3JDYik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY2IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zT3JDYiAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3QgaHR0cCBvcHRpb25zIGJ1dCBnZXQgJHt0eXBlb2Ygb3B0aW9uc09yQ2J9YCk7XG4gICAgICB0aGlzLnNlbmQoY29tbWFuZCwgb3B0aW9uc09yQ2IgfHwge30sIGNiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuc2VuZChjb21tYW5kLCBvcHRpb25zT3JDYik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFjY2VwdHMgbmF0aXZlIEphdmFTY3JpcHQgdHlwZXMgaW5zdGVhZCBvZiBgQXR0cmlidXRlVmFsdWVgcywgYW5kIGNhbGxzXG4gICAqIEV4ZWN1dGVTdGF0ZW1lbnRDb21tYW5kIG9wZXJhdGlvbiBmcm9tIHtAbGluayBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9AYXdzLXNkay9jbGllbnQtZHluYW1vZGIgQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RifS5cbiAgICpcbiAgICogSmF2YVNjcmlwdCBvYmplY3RzIHBhc3NlZCBpbiBhcyBwYXJhbWV0ZXJzIGFyZSBtYXJzaGFsbGVkIGludG8gYEF0dHJpYnV0ZVZhbHVlYCBzaGFwZXNcbiAgICogcmVxdWlyZWQgYnkgQW1hem9uIER5bmFtb0RCLiBSZXNwb25zZXMgZnJvbSBEeW5hbW9EQiBhcmUgdW5tYXJzaGFsbGVkIGludG8gcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgKi9cbiAgcHVibGljIGV4ZWN1dGVTdGF0ZW1lbnQoXG4gICAgYXJnczogRXhlY3V0ZVN0YXRlbWVudENvbW1hbmRJbnB1dCxcbiAgICBvcHRpb25zPzogX19IdHRwSGFuZGxlck9wdGlvbnNcbiAgKTogUHJvbWlzZTxFeGVjdXRlU3RhdGVtZW50Q29tbWFuZE91dHB1dD47XG4gIHB1YmxpYyBleGVjdXRlU3RhdGVtZW50KFxuICAgIGFyZ3M6IEV4ZWN1dGVTdGF0ZW1lbnRDb21tYW5kSW5wdXQsXG4gICAgY2I6IChlcnI6IGFueSwgZGF0YT86IEV4ZWN1dGVTdGF0ZW1lbnRDb21tYW5kT3V0cHV0KSA9PiB2b2lkXG4gICk6IHZvaWQ7XG4gIHB1YmxpYyBleGVjdXRlU3RhdGVtZW50KFxuICAgIGFyZ3M6IEV4ZWN1dGVTdGF0ZW1lbnRDb21tYW5kSW5wdXQsXG4gICAgb3B0aW9uczogX19IdHRwSGFuZGxlck9wdGlvbnMsXG4gICAgY2I6IChlcnI6IGFueSwgZGF0YT86IEV4ZWN1dGVTdGF0ZW1lbnRDb21tYW5kT3V0cHV0KSA9PiB2b2lkXG4gICk6IHZvaWQ7XG4gIHB1YmxpYyBleGVjdXRlU3RhdGVtZW50KFxuICAgIGFyZ3M6IEV4ZWN1dGVTdGF0ZW1lbnRDb21tYW5kSW5wdXQsXG4gICAgb3B0aW9uc09yQ2I/OiBfX0h0dHBIYW5kbGVyT3B0aW9ucyB8ICgoZXJyOiBhbnksIGRhdGE/OiBFeGVjdXRlU3RhdGVtZW50Q29tbWFuZE91dHB1dCkgPT4gdm9pZCksXG4gICAgY2I/OiAoZXJyOiBhbnksIGRhdGE/OiBFeGVjdXRlU3RhdGVtZW50Q29tbWFuZE91dHB1dCkgPT4gdm9pZFxuICApOiBQcm9taXNlPEV4ZWN1dGVTdGF0ZW1lbnRDb21tYW5kT3V0cHV0PiB8IHZvaWQge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgRXhlY3V0ZVN0YXRlbWVudENvbW1hbmQoYXJncyk7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zT3JDYiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLnNlbmQoY29tbWFuZCwgb3B0aW9uc09yQ2IpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNiID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yQ2IgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0IGh0dHAgb3B0aW9ucyBidXQgZ2V0ICR7dHlwZW9mIG9wdGlvbnNPckNifWApO1xuICAgICAgdGhpcy5zZW5kKGNvbW1hbmQsIG9wdGlvbnNPckNiIHx8IHt9LCBjYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbmQoY29tbWFuZCwgb3B0aW9uc09yQ2IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBY2NlcHRzIG5hdGl2ZSBKYXZhU2NyaXB0IHR5cGVzIGluc3RlYWQgb2YgYEF0dHJpYnV0ZVZhbHVlYHMsIGFuZCBjYWxsc1xuICAgKiBFeGVjdXRlVHJhbnNhY3Rpb25Db21tYW5kIG9wZXJhdGlvbiBmcm9tIHtAbGluayBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9AYXdzLXNkay9jbGllbnQtZHluYW1vZGIgQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RifS5cbiAgICpcbiAgICogSmF2YVNjcmlwdCBvYmplY3RzIHBhc3NlZCBpbiBhcyBwYXJhbWV0ZXJzIGFyZSBtYXJzaGFsbGVkIGludG8gYEF0dHJpYnV0ZVZhbHVlYCBzaGFwZXNcbiAgICogcmVxdWlyZWQgYnkgQW1hem9uIER5bmFtb0RCLiBSZXNwb25zZXMgZnJvbSBEeW5hbW9EQiBhcmUgdW5tYXJzaGFsbGVkIGludG8gcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgKi9cbiAgcHVibGljIGV4ZWN1dGVUcmFuc2FjdGlvbihcbiAgICBhcmdzOiBFeGVjdXRlVHJhbnNhY3Rpb25Db21tYW5kSW5wdXQsXG4gICAgb3B0aW9ucz86IF9fSHR0cEhhbmRsZXJPcHRpb25zXG4gICk6IFByb21pc2U8RXhlY3V0ZVRyYW5zYWN0aW9uQ29tbWFuZE91dHB1dD47XG4gIHB1YmxpYyBleGVjdXRlVHJhbnNhY3Rpb24oXG4gICAgYXJnczogRXhlY3V0ZVRyYW5zYWN0aW9uQ29tbWFuZElucHV0LFxuICAgIGNiOiAoZXJyOiBhbnksIGRhdGE/OiBFeGVjdXRlVHJhbnNhY3Rpb25Db21tYW5kT3V0cHV0KSA9PiB2b2lkXG4gICk6IHZvaWQ7XG4gIHB1YmxpYyBleGVjdXRlVHJhbnNhY3Rpb24oXG4gICAgYXJnczogRXhlY3V0ZVRyYW5zYWN0aW9uQ29tbWFuZElucHV0LFxuICAgIG9wdGlvbnM6IF9fSHR0cEhhbmRsZXJPcHRpb25zLFxuICAgIGNiOiAoZXJyOiBhbnksIGRhdGE/OiBFeGVjdXRlVHJhbnNhY3Rpb25Db21tYW5kT3V0cHV0KSA9PiB2b2lkXG4gICk6IHZvaWQ7XG4gIHB1YmxpYyBleGVjdXRlVHJhbnNhY3Rpb24oXG4gICAgYXJnczogRXhlY3V0ZVRyYW5zYWN0aW9uQ29tbWFuZElucHV0LFxuICAgIG9wdGlvbnNPckNiPzogX19IdHRwSGFuZGxlck9wdGlvbnMgfCAoKGVycjogYW55LCBkYXRhPzogRXhlY3V0ZVRyYW5zYWN0aW9uQ29tbWFuZE91dHB1dCkgPT4gdm9pZCksXG4gICAgY2I/OiAoZXJyOiBhbnksIGRhdGE/OiBFeGVjdXRlVHJhbnNhY3Rpb25Db21tYW5kT3V0cHV0KSA9PiB2b2lkXG4gICk6IFByb21pc2U8RXhlY3V0ZVRyYW5zYWN0aW9uQ29tbWFuZE91dHB1dD4gfCB2b2lkIHtcbiAgICBjb25zdCBjb21tYW5kID0gbmV3IEV4ZWN1dGVUcmFuc2FjdGlvbkNvbW1hbmQoYXJncyk7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zT3JDYiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLnNlbmQoY29tbWFuZCwgb3B0aW9uc09yQ2IpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNiID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yQ2IgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0IGh0dHAgb3B0aW9ucyBidXQgZ2V0ICR7dHlwZW9mIG9wdGlvbnNPckNifWApO1xuICAgICAgdGhpcy5zZW5kKGNvbW1hbmQsIG9wdGlvbnNPckNiIHx8IHt9LCBjYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbmQoY29tbWFuZCwgb3B0aW9uc09yQ2IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBY2NlcHRzIG5hdGl2ZSBKYXZhU2NyaXB0IHR5cGVzIGluc3RlYWQgb2YgYEF0dHJpYnV0ZVZhbHVlYHMsIGFuZCBjYWxsc1xuICAgKiBHZXRJdGVtQ29tbWFuZCBvcGVyYXRpb24gZnJvbSB7QGxpbmsgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RiIEBhd3Mtc2RrL2NsaWVudC1keW5hbW9kYn0uXG4gICAqXG4gICAqIEphdmFTY3JpcHQgb2JqZWN0cyBwYXNzZWQgaW4gYXMgcGFyYW1ldGVycyBhcmUgbWFyc2hhbGxlZCBpbnRvIGBBdHRyaWJ1dGVWYWx1ZWAgc2hhcGVzXG4gICAqIHJlcXVpcmVkIGJ5IEFtYXpvbiBEeW5hbW9EQi4gUmVzcG9uc2VzIGZyb20gRHluYW1vREIgYXJlIHVubWFyc2hhbGxlZCBpbnRvIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAgICovXG4gIHB1YmxpYyBnZXQoYXJnczogR2V0Q29tbWFuZElucHV0LCBvcHRpb25zPzogX19IdHRwSGFuZGxlck9wdGlvbnMpOiBQcm9taXNlPEdldENvbW1hbmRPdXRwdXQ+O1xuICBwdWJsaWMgZ2V0KGFyZ3M6IEdldENvbW1hbmRJbnB1dCwgY2I6IChlcnI6IGFueSwgZGF0YT86IEdldENvbW1hbmRPdXRwdXQpID0+IHZvaWQpOiB2b2lkO1xuICBwdWJsaWMgZ2V0KFxuICAgIGFyZ3M6IEdldENvbW1hbmRJbnB1dCxcbiAgICBvcHRpb25zOiBfX0h0dHBIYW5kbGVyT3B0aW9ucyxcbiAgICBjYjogKGVycjogYW55LCBkYXRhPzogR2V0Q29tbWFuZE91dHB1dCkgPT4gdm9pZFxuICApOiB2b2lkO1xuICBwdWJsaWMgZ2V0KFxuICAgIGFyZ3M6IEdldENvbW1hbmRJbnB1dCxcbiAgICBvcHRpb25zT3JDYj86IF9fSHR0cEhhbmRsZXJPcHRpb25zIHwgKChlcnI6IGFueSwgZGF0YT86IEdldENvbW1hbmRPdXRwdXQpID0+IHZvaWQpLFxuICAgIGNiPzogKGVycjogYW55LCBkYXRhPzogR2V0Q29tbWFuZE91dHB1dCkgPT4gdm9pZFxuICApOiBQcm9taXNlPEdldENvbW1hbmRPdXRwdXQ+IHwgdm9pZCB7XG4gICAgY29uc3QgY29tbWFuZCA9IG5ldyBHZXRDb21tYW5kKGFyZ3MpO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yQ2IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5zZW5kKGNvbW1hbmQsIG9wdGlvbnNPckNiKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjYiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnNPckNiICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdCBodHRwIG9wdGlvbnMgYnV0IGdldCAke3R5cGVvZiBvcHRpb25zT3JDYn1gKTtcbiAgICAgIHRoaXMuc2VuZChjb21tYW5kLCBvcHRpb25zT3JDYiB8fCB7fSwgY2IpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5zZW5kKGNvbW1hbmQsIG9wdGlvbnNPckNiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWNjZXB0cyBuYXRpdmUgSmF2YVNjcmlwdCB0eXBlcyBpbnN0ZWFkIG9mIGBBdHRyaWJ1dGVWYWx1ZWBzLCBhbmQgY2FsbHNcbiAgICogUHV0SXRlbUNvbW1hbmQgb3BlcmF0aW9uIGZyb20ge0BsaW5rIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL0Bhd3Mtc2RrL2NsaWVudC1keW5hbW9kYiBAYXdzLXNkay9jbGllbnQtZHluYW1vZGJ9LlxuICAgKlxuICAgKiBKYXZhU2NyaXB0IG9iamVjdHMgcGFzc2VkIGluIGFzIHBhcmFtZXRlcnMgYXJlIG1hcnNoYWxsZWQgaW50byBgQXR0cmlidXRlVmFsdWVgIHNoYXBlc1xuICAgKiByZXF1aXJlZCBieSBBbWF6b24gRHluYW1vREIuIFJlc3BvbnNlcyBmcm9tIER5bmFtb0RCIGFyZSB1bm1hcnNoYWxsZWQgaW50byBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gICAqL1xuICBwdWJsaWMgcHV0KGFyZ3M6IFB1dENvbW1hbmRJbnB1dCwgb3B0aW9ucz86IF9fSHR0cEhhbmRsZXJPcHRpb25zKTogUHJvbWlzZTxQdXRDb21tYW5kT3V0cHV0PjtcbiAgcHVibGljIHB1dChhcmdzOiBQdXRDb21tYW5kSW5wdXQsIGNiOiAoZXJyOiBhbnksIGRhdGE/OiBQdXRDb21tYW5kT3V0cHV0KSA9PiB2b2lkKTogdm9pZDtcbiAgcHVibGljIHB1dChcbiAgICBhcmdzOiBQdXRDb21tYW5kSW5wdXQsXG4gICAgb3B0aW9uczogX19IdHRwSGFuZGxlck9wdGlvbnMsXG4gICAgY2I6IChlcnI6IGFueSwgZGF0YT86IFB1dENvbW1hbmRPdXRwdXQpID0+IHZvaWRcbiAgKTogdm9pZDtcbiAgcHVibGljIHB1dChcbiAgICBhcmdzOiBQdXRDb21tYW5kSW5wdXQsXG4gICAgb3B0aW9uc09yQ2I/OiBfX0h0dHBIYW5kbGVyT3B0aW9ucyB8ICgoZXJyOiBhbnksIGRhdGE/OiBQdXRDb21tYW5kT3V0cHV0KSA9PiB2b2lkKSxcbiAgICBjYj86IChlcnI6IGFueSwgZGF0YT86IFB1dENvbW1hbmRPdXRwdXQpID0+IHZvaWRcbiAgKTogUHJvbWlzZTxQdXRDb21tYW5kT3V0cHV0PiB8IHZvaWQge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgUHV0Q29tbWFuZChhcmdzKTtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnNPckNiID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuc2VuZChjb21tYW5kLCBvcHRpb25zT3JDYik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY2IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zT3JDYiAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3QgaHR0cCBvcHRpb25zIGJ1dCBnZXQgJHt0eXBlb2Ygb3B0aW9uc09yQ2J9YCk7XG4gICAgICB0aGlzLnNlbmQoY29tbWFuZCwgb3B0aW9uc09yQ2IgfHwge30sIGNiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuc2VuZChjb21tYW5kLCBvcHRpb25zT3JDYik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFjY2VwdHMgbmF0aXZlIEphdmFTY3JpcHQgdHlwZXMgaW5zdGVhZCBvZiBgQXR0cmlidXRlVmFsdWVgcywgYW5kIGNhbGxzXG4gICAqIFF1ZXJ5Q29tbWFuZCBvcGVyYXRpb24gZnJvbSB7QGxpbmsgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RiIEBhd3Mtc2RrL2NsaWVudC1keW5hbW9kYn0uXG4gICAqXG4gICAqIEphdmFTY3JpcHQgb2JqZWN0cyBwYXNzZWQgaW4gYXMgcGFyYW1ldGVycyBhcmUgbWFyc2hhbGxlZCBpbnRvIGBBdHRyaWJ1dGVWYWx1ZWAgc2hhcGVzXG4gICAqIHJlcXVpcmVkIGJ5IEFtYXpvbiBEeW5hbW9EQi4gUmVzcG9uc2VzIGZyb20gRHluYW1vREIgYXJlIHVubWFyc2hhbGxlZCBpbnRvIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAgICovXG4gIHB1YmxpYyBxdWVyeShhcmdzOiBRdWVyeUNvbW1hbmRJbnB1dCwgb3B0aW9ucz86IF9fSHR0cEhhbmRsZXJPcHRpb25zKTogUHJvbWlzZTxRdWVyeUNvbW1hbmRPdXRwdXQ+O1xuICBwdWJsaWMgcXVlcnkoYXJnczogUXVlcnlDb21tYW5kSW5wdXQsIGNiOiAoZXJyOiBhbnksIGRhdGE/OiBRdWVyeUNvbW1hbmRPdXRwdXQpID0+IHZvaWQpOiB2b2lkO1xuICBwdWJsaWMgcXVlcnkoXG4gICAgYXJnczogUXVlcnlDb21tYW5kSW5wdXQsXG4gICAgb3B0aW9uczogX19IdHRwSGFuZGxlck9wdGlvbnMsXG4gICAgY2I6IChlcnI6IGFueSwgZGF0YT86IFF1ZXJ5Q29tbWFuZE91dHB1dCkgPT4gdm9pZFxuICApOiB2b2lkO1xuICBwdWJsaWMgcXVlcnkoXG4gICAgYXJnczogUXVlcnlDb21tYW5kSW5wdXQsXG4gICAgb3B0aW9uc09yQ2I/OiBfX0h0dHBIYW5kbGVyT3B0aW9ucyB8ICgoZXJyOiBhbnksIGRhdGE/OiBRdWVyeUNvbW1hbmRPdXRwdXQpID0+IHZvaWQpLFxuICAgIGNiPzogKGVycjogYW55LCBkYXRhPzogUXVlcnlDb21tYW5kT3V0cHV0KSA9PiB2b2lkXG4gICk6IFByb21pc2U8UXVlcnlDb21tYW5kT3V0cHV0PiB8IHZvaWQge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgUXVlcnlDb21tYW5kKGFyZ3MpO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yQ2IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5zZW5kKGNvbW1hbmQsIG9wdGlvbnNPckNiKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjYiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnNPckNiICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdCBodHRwIG9wdGlvbnMgYnV0IGdldCAke3R5cGVvZiBvcHRpb25zT3JDYn1gKTtcbiAgICAgIHRoaXMuc2VuZChjb21tYW5kLCBvcHRpb25zT3JDYiB8fCB7fSwgY2IpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5zZW5kKGNvbW1hbmQsIG9wdGlvbnNPckNiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWNjZXB0cyBuYXRpdmUgSmF2YVNjcmlwdCB0eXBlcyBpbnN0ZWFkIG9mIGBBdHRyaWJ1dGVWYWx1ZWBzLCBhbmQgY2FsbHNcbiAgICogU2NhbkNvbW1hbmQgb3BlcmF0aW9uIGZyb20ge0BsaW5rIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL0Bhd3Mtc2RrL2NsaWVudC1keW5hbW9kYiBAYXdzLXNkay9jbGllbnQtZHluYW1vZGJ9LlxuICAgKlxuICAgKiBKYXZhU2NyaXB0IG9iamVjdHMgcGFzc2VkIGluIGFzIHBhcmFtZXRlcnMgYXJlIG1hcnNoYWxsZWQgaW50byBgQXR0cmlidXRlVmFsdWVgIHNoYXBlc1xuICAgKiByZXF1aXJlZCBieSBBbWF6b24gRHluYW1vREIuIFJlc3BvbnNlcyBmcm9tIER5bmFtb0RCIGFyZSB1bm1hcnNoYWxsZWQgaW50byBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gICAqL1xuICBwdWJsaWMgc2NhbihhcmdzOiBTY2FuQ29tbWFuZElucHV0LCBvcHRpb25zPzogX19IdHRwSGFuZGxlck9wdGlvbnMpOiBQcm9taXNlPFNjYW5Db21tYW5kT3V0cHV0PjtcbiAgcHVibGljIHNjYW4oYXJnczogU2NhbkNvbW1hbmRJbnB1dCwgY2I6IChlcnI6IGFueSwgZGF0YT86IFNjYW5Db21tYW5kT3V0cHV0KSA9PiB2b2lkKTogdm9pZDtcbiAgcHVibGljIHNjYW4oXG4gICAgYXJnczogU2NhbkNvbW1hbmRJbnB1dCxcbiAgICBvcHRpb25zOiBfX0h0dHBIYW5kbGVyT3B0aW9ucyxcbiAgICBjYjogKGVycjogYW55LCBkYXRhPzogU2NhbkNvbW1hbmRPdXRwdXQpID0+IHZvaWRcbiAgKTogdm9pZDtcbiAgcHVibGljIHNjYW4oXG4gICAgYXJnczogU2NhbkNvbW1hbmRJbnB1dCxcbiAgICBvcHRpb25zT3JDYj86IF9fSHR0cEhhbmRsZXJPcHRpb25zIHwgKChlcnI6IGFueSwgZGF0YT86IFNjYW5Db21tYW5kT3V0cHV0KSA9PiB2b2lkKSxcbiAgICBjYj86IChlcnI6IGFueSwgZGF0YT86IFNjYW5Db21tYW5kT3V0cHV0KSA9PiB2b2lkXG4gICk6IFByb21pc2U8U2NhbkNvbW1hbmRPdXRwdXQ+IHwgdm9pZCB7XG4gICAgY29uc3QgY29tbWFuZCA9IG5ldyBTY2FuQ29tbWFuZChhcmdzKTtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnNPckNiID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMuc2VuZChjb21tYW5kLCBvcHRpb25zT3JDYik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgY2IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zT3JDYiAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3QgaHR0cCBvcHRpb25zIGJ1dCBnZXQgJHt0eXBlb2Ygb3B0aW9uc09yQ2J9YCk7XG4gICAgICB0aGlzLnNlbmQoY29tbWFuZCwgb3B0aW9uc09yQ2IgfHwge30sIGNiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuc2VuZChjb21tYW5kLCBvcHRpb25zT3JDYik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFjY2VwdHMgbmF0aXZlIEphdmFTY3JpcHQgdHlwZXMgaW5zdGVhZCBvZiBgQXR0cmlidXRlVmFsdWVgcywgYW5kIGNhbGxzXG4gICAqIFRyYW5zYWN0R2V0SXRlbXNDb21tYW5kIG9wZXJhdGlvbiBmcm9tIHtAbGluayBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9AYXdzLXNkay9jbGllbnQtZHluYW1vZGIgQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RifS5cbiAgICpcbiAgICogSmF2YVNjcmlwdCBvYmplY3RzIHBhc3NlZCBpbiBhcyBwYXJhbWV0ZXJzIGFyZSBtYXJzaGFsbGVkIGludG8gYEF0dHJpYnV0ZVZhbHVlYCBzaGFwZXNcbiAgICogcmVxdWlyZWQgYnkgQW1hem9uIER5bmFtb0RCLiBSZXNwb25zZXMgZnJvbSBEeW5hbW9EQiBhcmUgdW5tYXJzaGFsbGVkIGludG8gcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgKi9cbiAgcHVibGljIHRyYW5zYWN0R2V0KGFyZ3M6IFRyYW5zYWN0R2V0Q29tbWFuZElucHV0LCBvcHRpb25zPzogX19IdHRwSGFuZGxlck9wdGlvbnMpOiBQcm9taXNlPFRyYW5zYWN0R2V0Q29tbWFuZE91dHB1dD47XG4gIHB1YmxpYyB0cmFuc2FjdEdldChhcmdzOiBUcmFuc2FjdEdldENvbW1hbmRJbnB1dCwgY2I6IChlcnI6IGFueSwgZGF0YT86IFRyYW5zYWN0R2V0Q29tbWFuZE91dHB1dCkgPT4gdm9pZCk6IHZvaWQ7XG4gIHB1YmxpYyB0cmFuc2FjdEdldChcbiAgICBhcmdzOiBUcmFuc2FjdEdldENvbW1hbmRJbnB1dCxcbiAgICBvcHRpb25zOiBfX0h0dHBIYW5kbGVyT3B0aW9ucyxcbiAgICBjYjogKGVycjogYW55LCBkYXRhPzogVHJhbnNhY3RHZXRDb21tYW5kT3V0cHV0KSA9PiB2b2lkXG4gICk6IHZvaWQ7XG4gIHB1YmxpYyB0cmFuc2FjdEdldChcbiAgICBhcmdzOiBUcmFuc2FjdEdldENvbW1hbmRJbnB1dCxcbiAgICBvcHRpb25zT3JDYj86IF9fSHR0cEhhbmRsZXJPcHRpb25zIHwgKChlcnI6IGFueSwgZGF0YT86IFRyYW5zYWN0R2V0Q29tbWFuZE91dHB1dCkgPT4gdm9pZCksXG4gICAgY2I/OiAoZXJyOiBhbnksIGRhdGE/OiBUcmFuc2FjdEdldENvbW1hbmRPdXRwdXQpID0+IHZvaWRcbiAgKTogUHJvbWlzZTxUcmFuc2FjdEdldENvbW1hbmRPdXRwdXQ+IHwgdm9pZCB7XG4gICAgY29uc3QgY29tbWFuZCA9IG5ldyBUcmFuc2FjdEdldENvbW1hbmQoYXJncyk7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zT3JDYiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLnNlbmQoY29tbWFuZCwgb3B0aW9uc09yQ2IpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNiID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yQ2IgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0IGh0dHAgb3B0aW9ucyBidXQgZ2V0ICR7dHlwZW9mIG9wdGlvbnNPckNifWApO1xuICAgICAgdGhpcy5zZW5kKGNvbW1hbmQsIG9wdGlvbnNPckNiIHx8IHt9LCBjYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbmQoY29tbWFuZCwgb3B0aW9uc09yQ2IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBY2NlcHRzIG5hdGl2ZSBKYXZhU2NyaXB0IHR5cGVzIGluc3RlYWQgb2YgYEF0dHJpYnV0ZVZhbHVlYHMsIGFuZCBjYWxsc1xuICAgKiBUcmFuc2FjdFdyaXRlSXRlbXNDb21tYW5kIG9wZXJhdGlvbiBmcm9tIHtAbGluayBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9AYXdzLXNkay9jbGllbnQtZHluYW1vZGIgQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RifS5cbiAgICpcbiAgICogSmF2YVNjcmlwdCBvYmplY3RzIHBhc3NlZCBpbiBhcyBwYXJhbWV0ZXJzIGFyZSBtYXJzaGFsbGVkIGludG8gYEF0dHJpYnV0ZVZhbHVlYCBzaGFwZXNcbiAgICogcmVxdWlyZWQgYnkgQW1hem9uIER5bmFtb0RCLiBSZXNwb25zZXMgZnJvbSBEeW5hbW9EQiBhcmUgdW5tYXJzaGFsbGVkIGludG8gcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgKi9cbiAgcHVibGljIHRyYW5zYWN0V3JpdGUoXG4gICAgYXJnczogVHJhbnNhY3RXcml0ZUNvbW1hbmRJbnB1dCxcbiAgICBvcHRpb25zPzogX19IdHRwSGFuZGxlck9wdGlvbnNcbiAgKTogUHJvbWlzZTxUcmFuc2FjdFdyaXRlQ29tbWFuZE91dHB1dD47XG4gIHB1YmxpYyB0cmFuc2FjdFdyaXRlKFxuICAgIGFyZ3M6IFRyYW5zYWN0V3JpdGVDb21tYW5kSW5wdXQsXG4gICAgY2I6IChlcnI6IGFueSwgZGF0YT86IFRyYW5zYWN0V3JpdGVDb21tYW5kT3V0cHV0KSA9PiB2b2lkXG4gICk6IHZvaWQ7XG4gIHB1YmxpYyB0cmFuc2FjdFdyaXRlKFxuICAgIGFyZ3M6IFRyYW5zYWN0V3JpdGVDb21tYW5kSW5wdXQsXG4gICAgb3B0aW9uczogX19IdHRwSGFuZGxlck9wdGlvbnMsXG4gICAgY2I6IChlcnI6IGFueSwgZGF0YT86IFRyYW5zYWN0V3JpdGVDb21tYW5kT3V0cHV0KSA9PiB2b2lkXG4gICk6IHZvaWQ7XG4gIHB1YmxpYyB0cmFuc2FjdFdyaXRlKFxuICAgIGFyZ3M6IFRyYW5zYWN0V3JpdGVDb21tYW5kSW5wdXQsXG4gICAgb3B0aW9uc09yQ2I/OiBfX0h0dHBIYW5kbGVyT3B0aW9ucyB8ICgoZXJyOiBhbnksIGRhdGE/OiBUcmFuc2FjdFdyaXRlQ29tbWFuZE91dHB1dCkgPT4gdm9pZCksXG4gICAgY2I/OiAoZXJyOiBhbnksIGRhdGE/OiBUcmFuc2FjdFdyaXRlQ29tbWFuZE91dHB1dCkgPT4gdm9pZFxuICApOiBQcm9taXNlPFRyYW5zYWN0V3JpdGVDb21tYW5kT3V0cHV0PiB8IHZvaWQge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgVHJhbnNhY3RXcml0ZUNvbW1hbmQoYXJncyk7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zT3JDYiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aGlzLnNlbmQoY29tbWFuZCwgb3B0aW9uc09yQ2IpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGNiID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yQ2IgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBFcnJvcihgRXhwZWN0IGh0dHAgb3B0aW9ucyBidXQgZ2V0ICR7dHlwZW9mIG9wdGlvbnNPckNifWApO1xuICAgICAgdGhpcy5zZW5kKGNvbW1hbmQsIG9wdGlvbnNPckNiIHx8IHt9LCBjYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbmQoY29tbWFuZCwgb3B0aW9uc09yQ2IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBY2NlcHRzIG5hdGl2ZSBKYXZhU2NyaXB0IHR5cGVzIGluc3RlYWQgb2YgYEF0dHJpYnV0ZVZhbHVlYHMsIGFuZCBjYWxsc1xuICAgKiBVcGRhdGVJdGVtQ29tbWFuZCBvcGVyYXRpb24gZnJvbSB7QGxpbmsgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RiIEBhd3Mtc2RrL2NsaWVudC1keW5hbW9kYn0uXG4gICAqXG4gICAqIEphdmFTY3JpcHQgb2JqZWN0cyBwYXNzZWQgaW4gYXMgcGFyYW1ldGVycyBhcmUgbWFyc2hhbGxlZCBpbnRvIGBBdHRyaWJ1dGVWYWx1ZWAgc2hhcGVzXG4gICAqIHJlcXVpcmVkIGJ5IEFtYXpvbiBEeW5hbW9EQi4gUmVzcG9uc2VzIGZyb20gRHluYW1vREIgYXJlIHVubWFyc2hhbGxlZCBpbnRvIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAgICovXG4gIHB1YmxpYyB1cGRhdGUoYXJnczogVXBkYXRlQ29tbWFuZElucHV0LCBvcHRpb25zPzogX19IdHRwSGFuZGxlck9wdGlvbnMpOiBQcm9taXNlPFVwZGF0ZUNvbW1hbmRPdXRwdXQ+O1xuICBwdWJsaWMgdXBkYXRlKGFyZ3M6IFVwZGF0ZUNvbW1hbmRJbnB1dCwgY2I6IChlcnI6IGFueSwgZGF0YT86IFVwZGF0ZUNvbW1hbmRPdXRwdXQpID0+IHZvaWQpOiB2b2lkO1xuICBwdWJsaWMgdXBkYXRlKFxuICAgIGFyZ3M6IFVwZGF0ZUNvbW1hbmRJbnB1dCxcbiAgICBvcHRpb25zOiBfX0h0dHBIYW5kbGVyT3B0aW9ucyxcbiAgICBjYjogKGVycjogYW55LCBkYXRhPzogVXBkYXRlQ29tbWFuZE91dHB1dCkgPT4gdm9pZFxuICApOiB2b2lkO1xuICBwdWJsaWMgdXBkYXRlKFxuICAgIGFyZ3M6IFVwZGF0ZUNvbW1hbmRJbnB1dCxcbiAgICBvcHRpb25zT3JDYj86IF9fSHR0cEhhbmRsZXJPcHRpb25zIHwgKChlcnI6IGFueSwgZGF0YT86IFVwZGF0ZUNvbW1hbmRPdXRwdXQpID0+IHZvaWQpLFxuICAgIGNiPzogKGVycjogYW55LCBkYXRhPzogVXBkYXRlQ29tbWFuZE91dHB1dCkgPT4gdm9pZFxuICApOiBQcm9taXNlPFVwZGF0ZUNvbW1hbmRPdXRwdXQ+IHwgdm9pZCB7XG4gICAgY29uc3QgY29tbWFuZCA9IG5ldyBVcGRhdGVDb21tYW5kKGFyZ3MpO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yQ2IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5zZW5kKGNvbW1hbmQsIG9wdGlvbnNPckNiKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjYiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnNPckNiICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdCBodHRwIG9wdGlvbnMgYnV0IGdldCAke3R5cGVvZiBvcHRpb25zT3JDYn1gKTtcbiAgICAgIHRoaXMuc2VuZChjb21tYW5kLCBvcHRpb25zT3JDYiB8fCB7fSwgY2IpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5zZW5kKGNvbW1hbmQsIG9wdGlvbnNPckNiKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|